在 Dataframe 的列中选择至少两个匹配的变量,并使用r [closed]创建新列

qmb5sa22  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(111)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

4天前关闭。
Improve this question
我有一个 Dataframe 与3列或更多,我需要提取这些项目从列中存在于两个或更多列在一个 Dataframe ,并把这些项目在新的列。这里是我的数据供您参考

df3 <-data.frame(Gene= c("A", "B", "C","D","E","G"),
             G1=c("GH13_22",  "GH109","GT57", "AA3","-","-"),
             G2=c("GH13_22","- ","GT57","AA3", "GT41","PL"),
             G3=c("GH13", "GH1O9","-", "GT41", "GT41","-"))

输出将是这样的

df3 <-data.frame(Gene= c("A", "B", "C","D","E","G"),
             G1=c("GH13_22",  "GH109","GT57", "AA3","-","-"),
             G2=c("GH13_22","- ","GT57","AA3", "GT41","PL"),
             G3=c("GH13", "GH1O9","-", "GT41", "GT41","-"),
             G4=c("GH13_22", "GH1O9","GT57","AA3","GT41","-"))

感谢您的帮助我试过这个代码可以任何人请更正它

library(data.table)
Compar <- data.table(df3)
D3<- cazy_Compar[G1==G2|
                 G2==G2|
                 G1==G3]
sr4lhrrt

sr4lhrrt1#

希望对你的问题有所帮助。

g4 <- data.frame(G4=rep(NA,6))

for(j in 1:nrow(df3)){
  vec <- c()
  for(i in 2:4){
    a <- df3[j,i]
    vec <- c(vec, a)
  }
  out <- which.max(table(vec))
  g4[j,1] <- names(out)
}

df3[,5]<-g4
x3naxklr

x3naxklr2#

这个答案使用了data.table包,如果你以前从未见过这个包,下面的代码可能会让你感到困惑,所以如果你决定使用这个解决方案,我建议你搜索一些基本的资源。
简单地说,X := Y使用公式Y创建了一个名为X的新列。特殊符号.SD是整个数据集的占位符(在本例中),然后将其输入apply()的第一个参数。最后,我们使用table函数将给定行制成表格,然后which.max()调用选取该行中出现频率最高的值。

library(data.table)
setDT(df3)

df3[, G4 := apply(.SD, 1, \(x) names(which.max(table(x))]
df3

相关问题