Я новичок в R, и я действительно пытаюсь понять типы данных.R - Список заметок/Вектор
У меня есть этот dataframe:
> names = c('First Name', 'Second Name')
> timestamps = c('123,124,125,126', '234,235,236')
> df = data.frame(names, timestamps)
names timestamps
1 First Name 123,124,125,126
2 Second Name 234,235,236
На данном этапе, временные метки являются символы. Хотите, чтобы превратить его в список, так что я:
df$timestamps <- lapply(df$timestamps, function(x) as.numeric(unlist(strsplit(as.character(x), ','))))
> df
names timestamps
1 First Name 123, 124, 125, 126
2 Second Name 234, 235, 236
Тогда я хочу, чтобы создать три колонки, count
, min
, max
.
df$count <- lapply(df$timestamps, function(x) length(x))
df$min <- lapply(df$timestamps, function(x) min(x))
df$max <- lapply(df$timestamps, function(x) max(x))
Но тогда он перестает работать. Я хочу заказать его count
и создать столбец duration
.
Я пробовал:
> df$duration <- df$max - df$min
Error in df$max - df$min : non-numeric argument to binary operator
> df$duration <- lapply(df, function(x) x$max - x$min)
Error in x$max : $ operator is invalid for atomic vectors
> df <- df[order(-df$count),]
Error in -df$count : invalid argument to unary operator
Если я бегу
> typeof(df$count)
[1] "list"
Я хотел integer
, почему нет? Если я выполнить:
> typeof(length(df[1,]$timestamps))
[1] "integer"
Так df$count
должен быть массивом integer
с, не так ли?
Является ли мой подход правильным? Какой тип данных проще всего манипулировать? Каково решение получить столбцы duration
и получить их.
Надеюсь, что я могу быть ясным, трудно задавать вопрос правильно о чем-то, что неясно для меня.
От создания 'count' переменной вперед, попробуйте использовать' sapply' довольно чем 'lapply'. – joran
... FWIW, происхождение вашей путаницы, вероятно, связано с тем, что вы начинаете с переменной 'timestamps' как столбца списка в фрейме данных, что может быть сделано, но несколько« нестандартно ». Более «обычным» способом структурирования таких данных было бы преобразование его в длинный формат с уникальной строкой для каждой комбинации имен/временных меток, чтобы исходный фрейм данных имел 7 строк (или 8 в зависимости от того, как вы хотите для обработки отсутствующих данных), а не 2. – joran