一个非常基本的问题,因为我是R的新手。 我所拥有的是数据框中的数据:
DESCRI Region area
1 Houses 1 1.225305e-04
2 Gardens 1 5.444932e-04
3 Forest 1 6.151541e-04
4 Lake 1 2.903044e-05
5 Sea 1 2.451042e-04
6 Houses 2 2.739274e-06
7 Gardens 2 1.223057e-04
8 Forest 2 3.869934e-04
9 Lake 2 3.945288e-06
10 Sea 2 1.884626e-06
我需要这样的东西:
Region 1: X% Houses
Y% Gardens
Z% Forest
V% Lake
Y% Sea
Region 2: X% Houses
Y% Gardens
Z% Forest
V% Lake
Y% Sea
data.table包可能以某种方式执行此操作,但我还没有找到解决方案。我设法获得的是百分比的附加列。
DESCRI Region area perc
1 Houses 1 1.225305e-04 0.03e-04
2 Gardens 1 5.444932e-04 0.02e-04
答案 0 :(得分:1)
由于您是R的新手,因此使用for循环以完全透明的方式了解如何执行此操作可能是值得的。这是一种可能性:
var alarmSchema = new Schema({
timestamp : Number,
dateTime : String, //yyyymmddhhss
difference : Number,
actionTaken : String, //"send sms"
});
var deviceSchema = new Schema({
deviceId: {
type : String,
index : {
unique : true,
dropDups : true
}
},
alarms : [alarmSchema]
});
请注意,为此,您需要先对原始数据框进行排序,以便区域全部按升序排列。区域内土地覆盖类别的顺序无关紧要,甚至可能在区域之间不一致。
答案 1 :(得分:1)
我们可以使用data.table
str1 <- setDT(df1)[,ArSum:= sum(area) , by = Region
][, as.character(round(100*(area/ArSum),2)), by = .(DESCRI,Region)
][, paste(sprintf('%s%% %s', V1, DESCRI),collapse='\n'), by = Region
][, paste0('Region ', Region,':', V1)]
cat(paste(str1, collapse='\n\n\n'),'\n')
# Region 1:7.87% Houses
#34.99% Gardens
#39.53% Forest
#1.87% Lake
#15.75% Sea
#Region 2:0.53% Houses
#23.62% Gardens
#74.73% Forest
#0.76% Lake
#0.36% Sea