【问题标题】:Adding a True or False column for a dataframe if it matches a column of a different dataframe in R?如果它与 R 中不同数据框的列匹配,则为数据框添加 True 或 False 列?
【发布时间】:2020-12-13 02:19:43
【问题描述】:

我在 Python 中使用 Pandas 看到了一些答案,但在 R 中没有找到任何东西。如果该数据框的列匹配,我希望将 1 或 0 OR True 或 False 布尔类型列添加到数据框值与另一个数据框的列。

例如,假设我有一个“很棒”的数据框:

Name Value
A 1
B 23
C 1
D 15
E 18
F 19

还有另一个数据框“整洁”

Name Sports
A Soccer
B Bball
G Ball
N Ball
Z Volley
F Boxing

如果 'awesome' 中的 Name 列与 'neat' name 列匹配,我想在 'awesome' 数据框中添加一个 True 或 False 列。

所以“真棒”列将是: |姓名 |价值 | has_match | | -------- | ------|------------| |一个 | 1 |真 | |乙| 23 |真 | | C | 1 |假 | | D | 15 |假 | | E | 18 |假 | | F | 19 |是的 |

谁能告诉我如何在 R 中做到这一点?

注意:由于某种原因,GitHub 降价表似乎无法正常工作,如果有人知道如何将其修复到表中,请告诉我...但已创建图片以便于参考:

【问题讨论】:

  • 您好,我注意到您到目前为止已经提出了 9 个问题,但没有接受任何问题。请考虑从每个问题中接受一个最适合您的情况的答案。每个帖子您只能接受一个答案,但可以随心所欲地投票。可以参考stackoverflow.com/help/someone-answers

标签: r dataframe


【解决方案1】:

你可以使用%in%

awesome_df$has_match <- awesome_df$Name %in% unique(neat_df$Name)

【讨论】:

    【解决方案2】:

    您可以使用单线ifelse

    awesome = data.frame(Name = LETTERS[1:6], Value = c(1,23,1,15,18,19))
    neat = data.frame(Name = c("A", "B", "G", "N", "Z", "F"), Sports = c("Soccer", "Bball", "Ball", "Ball", "Volley", "Boxing"))
    
    awesome$has_match = ifelse(awesome$Name==neat$Name, TRUE, FALSE)
    awesome
    #  Name Value has_match
    #1    A     1      TRUE
    #2    B    23      TRUE
    #3    C     1     FALSE
    #4    D    15     FALSE
    #5    E    18     FALSE
    #6    F    19      TRUE
     
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多