这是一个例子。 normal是一个数据框,其rownames等于未指定年份的月份和日期(例如1月1日的“-01-01”)。列出的统计数据是在几年的范围内。
head(normal)
Source: local data frame [6 x 7]
md meanA sdA meanMax sdMax meanMin sdMin
1 -01-01 40.20556 1.424404 43.20185 1.792473 37.20926 1.575386
2 -01-02 40.33056 1.473267 43.16852 2.527014 37.49259 1.480592
3 -01-03 40.29630 1.645513 43.15926 2.347826 37.43333 1.572662
4 -01-04 40.17222 1.635409 42.85000 2.502623 37.49444 1.512707
5 -01-05 40.33796 1.681560 43.22593 2.486444 37.45000 1.511158
6 -01-06 40.22685 1.767241 42.98704 2.380686 37.46667 1.591779
md
#[1] "-01-01"
normal[1,"meanA"]
#Source: local data frame [1 x 1]
# meanA
# 1 40.20556
normal[md,"meanA"]
#Source: local data frame [1 x 1]
# meanA
# 1 NA
为什么R不会在这里采用rowname的值,因为它们都是唯一的?
答案 0 :(得分:3)
简而言之,显示的对象的md
列中的值不 tbl_df
对象的rownames,并使用字符向量索引行的工作原理rownames,而不是tbl_df
或data.frame
的任意组成部分。
此外,您似乎认为normal
是一个数据框;它不是,它是类tbl_df
的一个对象,只有从data.frame
类继承。这通常不会产生任何差异,但是如下所述,tbl_df
对象没有rownames,原始数据框中的任何rownames都转换为tbl_df
的第一个组件对象
正如 @DavidArenburg 在对该问题的评论中提到的,此问题的 dplyr 解决方案只是使用filter()
,如下所示:
filter(normal, md == md)
其中第一个md
引用具有该名称的tbl_df
对象的列(组件),第二个md
引用包含要匹配的字符串模式的本地字符向量:{ {1}}。
您不能使用"-01-01"
和标准tbl_df
这样的任意值进行索引。
您需要提供R Language Definition中列出的所需索引类型之一。
您可以将此类对象的rownames编入索引,这就是您尝试的内容,但data.frame
中的值不是rownames ; dplyr 的开发人员明确地将rownames移动到数据集中的一列,然后在对象上设置null rownames(然后显示为1,2,3,...等等)左侧输出)。
要做你想做的事,你需要得到一个匹配目标md
的{{1}}逻辑向量或匹配的索引的数字向量:
md
或
"-01-01"
后者显然是一个额外的冗余步骤,但是说明任何一种索引类型都可以。