如何 运行 仅在 R 中处理第一行?

How to run process through first row only in R?

我有一行代码包含 data.table 包,它允许我识别所有行并查看单元格是否包含单词“边距”。

Census_Bureau_Data<-Filter(function(Census_Bureau_Data) !any(Census_Bureau_Data %like% "Margin"), Census_Bureau_Data)

该代码运行完美,允许我删除包含带有 Margin 一词的一行的列。虽然我得到了我想要的结果,但我只希望我的脚本将进程限制在第一行。这是为了防止将来 Margin 一词恰好出现在第一行之外的某个地方,因此我不一定要删除我的整个列。我只关心第一列。

Census_Bureau_Data<-Filter(function(Census_Bureau_Data) !any(Census_Bureau_Data[1,] %like% "Margin"), Census_Bureau_Data) 

所以我尝试了这个。注意我添加的括号。我认为这就足够了。这应该很简单。我在哪里可以维护相同的字符串,但只需要 运行 到第一行?

[1,]

两条评论:

  1. 我认为将匿名函数的参数命名为与外部对象本身相同的名称有点令人困惑(虽然不是错误),因此为了简洁起见,我将在此处使用 function(xyz) ...
  2. 意识到在该函数中,xyz 是一个 向量 数据,而不是一帧数据,因此 [,1][1,]没有意义。
  3. 由于您只查看第一行的值,因此不需要 any,只需 [1].

我想这就是你需要的:

Filter(
  function(xyz) !(xyz[1] %like% "Margin"),
  Census_Bureau_Data
)

然而,虽然使用Filter并没有错,但我认为这可以简化一点:

# data.table
Census_Bureau_Data[, !Census_Bureau_Data[1,,drop=TRUE] %like% "Margin", with = FALSE ]

# data.frame or tbl_df
Census_Bureau_Data[, !Census_Bureau_Data[1,,drop=TRUE] %like% "Margin" ]

看来我发现这个有用。

Census_Bureau_Data<-Filter(function(Census_Bureau_Data) !(Census_Bureau_Data[[1]]  %like% "Margin"), Census_Bureau_Data)

我按照评论的建议删除了“任何”,并添加了双括号 [[1]]。我也 运行 测试。所以我在第 5 列和第 5 行添加了“边距”一词。

当我 运行 我原来的第 5 行和第 5 列中包含单词 margin 的单元格被删除了。当我 运行 我在这里的代码时,脚本只应用于第 1 行,它保留了我的列。