【发布时间】:2011-01-23 09:57:18
【问题描述】:
我在 R 中索引 data.frames 时遇到了一些问题。我是 R 初学者。我有一个名为d 的data.frame,它有35512 列和77 行。我有一个名为 rd 的列表,其中包含 35512 个元素。我希望d 的所有列对应于rd 中的项目小于100。这就是我正在做的事情:
# just to prove I'm not crazy
> length(colnames(d))
[1] 35512
> length(rownames(d))
[1] 77
> length(rd)
[1] 35512
# find all the elements of rd less than 100 (+ unnecessary faffing?)
> i <- unlist(rd<100)
> names(i) <- NULL
# try to extract all the elements of d corresponding to rd < 100
> d <- d[,i]
Error in `[.data.frame`(d, , i) : undefined columns selected
我真的不想做unlist 和names(i) <- NULL 的事情,但我越来越偏执了。谁能帮忙看看这个错误信息到底意味着什么?
如果有帮助,rd 变量是使用以下内容创建的:
rd = lapply(lapply(d, range), diff)
希望能告诉我d 每一列范围的差异。
附:任何能告诉我一个命令来查找 data.frame 的形状而不是查询其行名和列名的长度的人都将获得额外的奖励。
编辑:这是rd 的样子:
> rd[1:3]
$`10338001`
[1] 7198.886
$`10338003`
[1] 4748.963
$`10338004`
[1] 3173.046
当我完成我的工作后,i 看起来像这样:
> i[7:10]
[1] FALSE FALSE FALSE TRUE
【问题讨论】:
-
i 的长度是多少?确认这是真的:
length(i) == ncol(d)。另外,检查您是否在 i 中有任何 NA。any(is.na(i))最后,检查is.logical(i)。 -
啊!
any(is.na(i))返回TRUE。感谢您提供此线索! -
为什么有这么宽的data.frame?你确定你不想要一个长的 data.frame 吗?或者如果一切都是数字,只是一个矩阵?在内部,data.frames 是列向量列表,因此非常宽的 df 操作起来效率不高。
-
嗨哈兰 - 经过几天我不熟练的黑客攻击后,我的 data.frame 只是以这种方式结束。我不知道内部表示,我想我已经习惯了 Python 中以行为中心的表示!将转置......这是一个data.frame而不是矩阵,因为那里有一些因素,直到我决定对每列的范围感兴趣。本质上这里没有设计。我只是跟着粉笔......
标签: r indexing dataframe shape logical-operators