背景:我有一列有重複值的數據框。我試圖通過挑出所有具有重複列值的行來分割這個數據幀,處理它們,然後用所有處理過的行吐出一個新的數據幀。獨特列值的子集數據框的行爲
我很驚訝,因爲到了什麼錯誤在這裏下面的代碼:
dataSet <- structure(list(DAY = structure(1:10, .Label = c("Tuesday",
"Tuesday", "Tuesday", "Tuesday", "Tuesday",
"Tuesday", "Tuesday", "Tuesday", "Tuesday",
"Tuesday", "Tuesday", "Tuesday", "Tuesday",
"Tuesday", "Tuesday", "Tuesday", "Tuesday",
"Tuesday", "Tuesday", "Tuesday", "Tuesday",
"Tuesday", "Tuesday", "Tuesday"), class = "factor"),
variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), .Label = c("act1", "act2", "act3", "act4",
"act5", "act12", "act19", "act116", "act22",
"act6", "act13", "act111", "act117", "act23",
"act7", "act14", "act112", "act118", "act24",
"act8", "act15", "act113", "act119", "act25",
"act9", "act16", "act114", "act20", "act26",
"act10", "act17", "act115", "act21", "act27",
"act11", "act18"), class = "factor"), value = c(67,
65, 40, 79, 106, 90, 57, 59, 2, 12)), .Names = c("DAY",
"variable", "value"), row.names = c(NA, 10L), class = "data.frame")
uniq <- unique(dataSet$variable)
for (i in 1:length(uniq)){
rowsPerVal <- dataSet[dataSet$variable == uniq[i], ]
print(length(rowsPerVal))
}
我只是不明白最後的print語句怎麼說的長度爲3,當有10個記錄在具有相同值的數據幀爲variable
列。
數據幀的「長度」是列數,因爲它實際上是一個列表。你可能是指'nrow'或者其他東西。 – joran 2013-05-08 20:09:33
嗯,在你的例子中你只有一個「uniq」值。這足以說明你的問題嗎?噢,別介意,喬蘭的權利:'印刷(nrow(...))'而不是。或者更好,只是'print(sum(dataSet $ variable == uniq [i]))'並跳過上面的行。當然也有一種不循環的方法。 – Frank 2013-05-08 20:18:32