【问题标题】:How to use a target list to match a row in a dataframe in R, and once matched, add a value to a new column如何使用目标列表匹配 R 中数据框中的行,一旦匹配,将值添加到新列
【发布时间】:2021-05-17 12:14:31
【问题描述】:

我有一个 dataframe (A),其中包含几列值和文本。 第 1 列包含不唯一的名称。我有一个列表,其中包含数据框 A 第 1 列中存在的一些相同名称,它们是唯一的。我想将我的列表匹配到数据框 A,如果值匹配,在数据框 A 中创建一个新的第 4 列,并在该行中添加一个“X”。这是一个示例(粗体中的重复值):

数据框 A:

1 2 3
Barb048 53458 0.004
An590 345345 0.485
84布尔 53455 0.8474
hfgjeff 345 0.765
Barb048 542 0.66
安9457 4555 0.00746
uryhZe9 84 0.27777
(...)

列表:

Barb048、hfgjeff、Ann9457 (...)

所需的数据框:

1 2 3 4
Barb048 53458 0.004 X
An590 345345. 0.485
84布尔 53455 0.8474
hfgjeff 345 0.765 X
Barb048 542 0.66 X
安9457 4555 0.00746 X
uryhZe9 84 0.27777
(...)

我想过用列表中的值创建一个数据框 (B),然后在所有行中包含一个带有 X 的列,然后匹配数据框,但我认为使用 目标列表 会是容易得多。

【问题讨论】:

  • 请在发帖前检查有关如何提问的指南,并尝试给出一个可重复的示例,以便更容易回答。
  • 如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example

标签: r match data-manipulation target


【解决方案1】:

这可以通过ifelse%in%来完成:

df$new <- ifelse(df$X1 %in% names, "X", "")

结果:

df 
       X1 new
1 Barb048   X
2   An590  
3   84Bur  
4   hfgje  
5 Barb048   X
6 Ann9457   X
7 uryhZe9  

数据:

# list of names:
names <- c("Barb048", "hfgjeff", "Ann9457")
# dataframe:
df <- data.frame(
  "X1" = c("Barb048","An590", "84Bur","hfgje","Barb048", "Ann9457", "uryhZe9")
)

【讨论】:

    【解决方案2】:

    我实际上找到了一个基于 Chris Ruehlemann 给出的解决方案。

    我将两个数据集(数据框和列表)都加载为数据框(它们都是 csv 格式)。我要匹配的列在两个数据集的第 1 列中(并且列名为 C1)。

    然后我运行了这段代码:

    dfA <- read.csv2('DFA.csv', header = T, stringsAsFactors = F)
    
    dftarget <- read.csv2('targetlist.csv', header = F, stringsAsFactors = F)
    
    dfA$new_column <- ifelse(dfA$C1 %in% dftarget$C1, "X", "")
    

    【讨论】:

      猜你喜欢
      • 2020-08-03
      • 2012-04-11
      • 2018-11-27
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多