【发布时间】:2015-11-08 17:17:17
【问题描述】:
好的,找不到更好的标题
假设我有 my_dataframe:
Name Value1 Value2
AA 10 20
BB 15 30
如果我这样做:
nrow(my_dataframe[my_dataframe$Value2>20,]
结果我得到'1'
我想创建my_second_dataframe,比如只有'Value2'列:
my_second_dataframe<- my_dataframe[,'Value2', drop=FALSE]
让我看看:
class(my_second_dataframe)
[1] "data.frame"
class(my_second_dataframe$Value2)
[1] "numeric"
然后:
nrow(my_second_dataframe[my_second_dataframe$Value2>20,]
NULL
????? 这将是一个函数的一部分,我想在其中隔离一个选择的列,并根据阈值数获取该列的行数。我做错了什么?
谢谢
【问题讨论】:
-
在第一种情况下你使用
drop=FALSE,为什么你没有在第二种情况下使用my_second_dataframe[my_second_dataframe$Value2>20,, drop=FALSE]因为只有一列,它从data.frame转换为vector.或者你可以使用subset(my_second_dataframe, Value2>20) -
您好,谢谢。添加 'drop=FALSE' 确实有效。不过我还是不明白。当我检查原始数据集的行号时,我不需要指定 drop 参数。此外,我不信任子集函数(请参阅警告)
-
默认情况下,在
subset中为drop=FALSE,但如果您使用[,则为drop=TRUE。您可以从?Extract查看更多详情 -
好的,我再次阅读了您的第一条评论,我的错。我已经为 my_second_dataframe 添加了一个列,现在该命令无需添加 drop 即可工作。所以,基本上,当只有一列时,它会从 data.frame 转换为 vector (如你所说......)。我不知道!
好吧,感谢您的帮助 :) 很遗憾,我无法将评论标记为已接受的答案。 -
除了 akrun 的评论之外,您可能还会发现有用的
?NROW(而不是nrow)