Фон: у меня есть кадр данных с одним столбцом, имеющим повторяющиеся значения. Я пытаюсь разбить этот фрейм данных, выбирая все строки с повторяющимися значениями столбцов, обрабатывая их, а затем выплевывая новый кадр данных со всеми обработанными строками.Поведение подмножества данных для уникальных значений столбцов
Я поражен тем, что происходит не так здесь в следующем коде:
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))
}
Я просто не понимаю, как окончательное утверждение печати говорит длина 3, при наличии 10 записей в кадр данных с тем же значением для столбца variable
.
«длина» кадра данных - это количество столбцов, так как оно фактически является списком. Вероятно, вы имели в виду «nrow» или что-то еще. – joran
У вас есть только одно значение в «uniq» в вашем примере. Этого достаточно, чтобы проиллюстрировать вашу проблему? О, неважно, прав Джоран: 'print (nrow (...)) вместо этого. Или лучше, просто «print (sum (dataSet $ variable == uniq [i])) и пропустите строку выше. Конечно, есть способ сделать это и без циклов. – Frank