当我创建一个数据帧时,其中一个变量包含整数向量,例如
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
为什么会出现这种情况?当我想要另一个变量中的向量长度时,我应该使用什么?
答案 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
即可强制length
为myDf$meas
中的每个条目执行{{1}}。
答案 2 :(得分:1)
看看
str(myDf)
您会看到myDf$meas
仍然是list
。因此,length(myDf$meas)
的结果是此列表的长度,即5。
您正在寻找
myDf$lengthMeas <- sapply(myDf$meas, length).