首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在另一列中按R中的组重复,则从列中添加元素

如果在另一列中按R中的组重复,则从列中添加元素
EN

Stack Overflow用户
提问于 2022-05-10 08:10:55
回答 3查看 55关注 0票数 1

我有一个数据文件,例如:

代码语言:javascript
复制
Groups Element 
G1     E1
G2     E1
G1     E2
G1     E3
G1     E4
G1     E5
G2     E5
G2     E5
G2     E6
G1     E6
G1     E7

我想创建一个名为Element2 for G1G2 groups的新列,它只有在G1和G2组E 210中才具有元素值。

然后我应该得到:

代码语言:javascript
复制
Groups Element Element2
G1     E1      E1
G2     E1      E1
G1     E2      NA
G1     E3      NA
G1     E4      NA
G1     E5      E5
G2     E5      E5
G2     E5      E5
G2     E6      E6
G1     E6      E6
G1     E7      NA

以下是表格的dput格式(如果可以的话):

代码语言:javascript
复制
structure(list(Groups.Element = c("G1     E1", "G2     E1", "G1     E2", 
"G1     E3", "G1     E4", "G1     E5", "G2     E5", "G2     E5", 
"G2     E6", "G1     E6", "G1     E7")), class = "data.frame", row.names = c(NA, 
-11L))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-05-10 08:19:51

您可以在组match和G2元素的intersect上使用G1。

代码语言:javascript
复制
. <- with(split(x$Element, x$Groups), intersect(G1, G2))
x$Element2 <- .[match(x$Element, .)]
x
#   Groups Element Element2
#1      G1      E1       E1
#2      G2      E1       E1
#3      G1      E2     <NA>
#4      G1      E3     <NA>
#5      G1      E4     <NA>
#6      G1      E5       E5
#7      G2      E5       E5
#8      G2      E5       E5
#9      G2      E6       E6
#10     G1      E6       E6
#11     G1      E7     <NA>

数据:

代码语言:javascript
复制
x <- read.table(header=TRUE, text="Groups Element 
G1     E1
G2     E1
G1     E2
G1     E3
G1     E4
G1     E5
G2     E5
G2     E5
G2     E6
G1     E6
G1     E7")
票数 4
EN

Stack Overflow用户

发布于 2022-05-10 08:24:55

使用intersectcase_when

代码语言:javascript
复制
library(dplyr)
u <- Reduce(intersect, split(dat$Element, dat$Groups))

dat %>% 
  mutate(Element2 = case_when(Element %in% u ~ Element))

   Groups Element Element2
1      G1      E1       E1
2      G2      E1       E1
3      G1      E2     <NA>
4      G1      E3     <NA>
5      G1      E4     <NA>
6      G1      E5       E5
7      G2      E5       E5
8      G2      E5       E5
9      G2      E6       E6
10     G1      E6       E6
11     G1      E7     <NA>
票数 4
EN

Stack Overflow用户

发布于 2022-05-10 08:44:42

您可以尝试下面的代码

代码语言:javascript
复制
transform(
    df,
    Element2 = Element[ave(match(Groups, Groups), Element, FUN = var) > 0]
)

这给

代码语言:javascript
复制
   Groups Element Element2
1      G1      E1       E1
2      G2      E1       E1
3      G1      E2     <NA>
4      G1      E3     <NA>
5      G1      E4     <NA>
6      G1      E5       E5
7      G2      E5       E5
8      G2      E5       E5
9      G2      E6       E6
10     G1      E6       E6
11     G1      E7     <NA>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72182770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档