R - 混乱列表/矢量

时间:2016-02-09 16:12:26

标签: r

我是R的新手,我真的很难理解数据类型。

我有这个数据框:

> 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

然后我要创建三列,countminmax

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列并获取订单的解决方案是什么。

我希望我能说清楚,很难对我这么不清楚的事情提出正确的问题。

1 个答案:

答案 0 :(得分:0)

问题是这里

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))

您正在创建列表,这些列表将转到data.frame df的列,然后您的下一个用于向量的操作不起作用。

正如joran所说,在这种情况下使用sapply会返回向量,所以你会没事的。

你可以这样做:

sapply (df, class)

找出data.frame中每个列的类