如何获取R中两列之间的公共值?

如何获取R中两列之间的公共值?,r,R,以Dataframe为例: df <- data.frame(x = c("A,B,C","A,D","B,C,E","C,E,G"), y = c("A","D","A",NA), MyAim = c("A","D","","")) x y MyAim 1 A,B,C A A 2 A,D D D 3 B,C,E A 4 C,E,G <NA>

以Dataframe为例:

df <- data.frame(x = c("A,B,C","A,D","B,C,E","C,E,G"),
                 y = c("A","D","A",NA),
                 MyAim = c("A","D","",""))

      x    y MyAim
1 A,B,C    A     A
2   A,D    D     D
3 B,C,E    A      
4 C,E,G <NA>      
我想在新列中获得x和y列之间的公共值。
提前感谢。

如果x是字符,那么以下是执行此操作的多种方法之一:

intersect(unlist(strsplit(df$x, split=",")), df$y)
如果x不是字符,则strsplit将崩溃,因此需要执行以下操作:

intersect(unlist(strsplit(as.character(df$x), split=",")), df$y)
要将其添加到数据框中

myAim <- intersect(unlist(strsplit(as.character(df$x), split=",")), df$y)
df$myAim <- c(myAim, rep(NA, nrow(df)-length(myAim)))
df
      x    y myAim
1 A,B,C    A     A
2   A,D    D     D
3 B,C,E    A  <NA>
4 C,E,G <NA>  <NA>
注:
如果y包含x中的值,则myAim的长度可能高于数据帧的行数。在这种情况下,将结果添加到数据帧似乎不合适。

如果x是字符,则以下是执行此操作的多种方法之一:

intersect(unlist(strsplit(df$x, split=",")), df$y)
如果x不是字符,则strsplit将崩溃,因此需要执行以下操作:

intersect(unlist(strsplit(as.character(df$x), split=",")), df$y)
要将其添加到数据框中

myAim <- intersect(unlist(strsplit(as.character(df$x), split=",")), df$y)
df$myAim <- c(myAim, rep(NA, nrow(df)-length(myAim)))
df
      x    y myAim
1 A,B,C    A     A
2   A,D    D     D
3 B,C,E    A  <NA>
4 C,E,G <NA>  <NA>
注: 如果y包含x中的值,则myAim的长度可能高于数据帧的行数。在这种情况下,将结果添加到数据帧似乎不合适。

strsplit可以很容易地用于强制使用字符的应用程序,请重试

df <- transform(df, MyAim=apply(df, 1, function(x) {
  s <- el(strsplit(x[1], ","))
  s[match(x[2], s)]
  }))
df
# x    y MyAim
# 1 A,B,C    A     A
# 2   A,D    D     D
# 3 B,C,E    A  <NA>
# 4 C,E,G <NA>  <NA>
strsplit可以很容易地用于强制字符try的应用程序

df <- transform(df, MyAim=apply(df, 1, function(x) {
  s <- el(strsplit(x[1], ","))
  s[match(x[2], s)]
  }))
df
# x    y MyAim
# 1 A,B,C    A     A
# 2   A,D    D     D
# 3 B,C,E    A  <NA>
# 4 C,E,G <NA>  <NA>
我们可以使用mapply:

资料

我们可以使用mapply:

资料


出于几个原因,这样做并不明智,但我还是会修改我的答案^_^出于几个原因,这样做并不明智,但我还是会修改我的答案^_^如果Z列有多个公共值,我们应该怎么做?或者,例如df$y[1]是A,B@Ronak@nerdakgul也可以使用y并从函数中获取逗号分隔的值。更新了答案。如果Z列有多个公共值,我们该怎么办?或者,例如df$y[1]是A,B@Ronak@nerdakgul也可以使用y并从函数中获取逗号分隔的值。更新了答案。?el-我一天的新功能。?el-我一天的新功能。