首页 > 解决方案 > 如何使用目标列表匹配 R 中数据框中的行,一旦匹配,将值添加到新列

问题描述

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

数据框A:

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

列表:

Barb048、hfgjeff、Ann9457 (...)

所需的数据框:

1 2 3 4
Barb048 53458 0.004 X
An590 345345. 0.485
84Bur 53455 0.8474
hfgjeff 345 0.765 X
Barb048 542 0.66 X
Ann9457 4555 0.00746 X uryhZe9
84 0.27

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

标签: rmatchdata-manipulationtarget

解决方案


这可以通过ifelseand来完成%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")
)

推荐阅读