使用包含向量的变量对数据框进行操作

时间:2013-06-07 13:09:52

标签: r vector dataframe

当我创建一个数据帧时,其中一个变量包含整数向量,例如

id <- 1:5
meas <- list(NA,c(1,2),c(1),c(1,2,3),c(1,2,3,4))
myDf <- data.frame(cbind(id,meas))

我可以轻松地将矢量复制到另一个变量中或检查它是否包含NA

myDf$copyMeas <- myDf$meas
myDf$naMeas <- is.na(myDf$meas)

但是当我想得到向量的长度时,我得到了数据框中的观察数量

myDf$lengthMeas <- length(myDf$meas)

  id       meas   copyMeas naMeas lengthMeas
1  1         NA         NA   TRUE          5
2  2       1, 2       1, 2  FALSE          5
3  3          1          1  FALSE          5
4  4    1, 2, 3    1, 2, 3  FALSE          5
5  5 1, 2, 3, 4 1, 2, 3, 4  FALSE          5

为什么会出现这种情况?当我想要另一个变量中的向量长度时,我应该使用什么?

3 个答案:

答案 0 :(得分:1)

因为该列是一个列表。如果你要求列表的长度,你将获得它有多少元素。你似乎想要每个元素的长度:

sapply(myDf$meas,length)
[1] 1 2 1 3 4

答案 1 :(得分:1)

这就是诀窍:

sapply(myDf$meas, length)
[1] 1 2 1 3 4

length没有矢量化,它假设您需要放入其中的对象的长度。使用sapply即可强制lengthmyDf$meas中的每个条目执行{{1}}。

答案 2 :(得分:1)

看看

str(myDf)

您会看到myDf$meas仍然是list。因此,length(myDf$meas)的结果是此列表的长度,即5。

您正在寻找

myDf$lengthMeas <- sapply(myDf$meas, length).