3

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

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

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

4

3 回答 3

1

看一下

str(myDf)

你会看到那myDf$meas仍然是一个list. 因此,结果length(myDf$meas)是这个列表的长度,即 5。

你正在寻找

myDf$lengthMeas <- sapply(myDf$meas, length).
于 2013-06-07T13:14:42.847 回答
1

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

sapply(myDf$meas,length)
[1] 1 2 1 3 4
于 2013-06-07T13:13:31.197 回答
1

这可以解决问题:

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

length未矢量化,它假定您想要放入其中的对象的长度。使用sapply你的力量length为每个条目完成myDf$meas

于 2013-06-07T13:13:42.387 回答