R 创建新列以标识两列是否相同,但第三列中的值不同

R 创建新列以标识两列是否相同,但第三列中的值不同,r,R,我想在我的数据框中添加一个新列,其中包含true和false值,以告诉我两列是否有重复的值,但第三列是否有不同的值 这是我现在的表格: | ID | name | age|student| | --- | -----|----|-------| | 1 | Joe |23 | Yes | | 2 | Rayan|13 | Yes | | 3 | Sara |20 | No | | 4 | Rayan|21 | Yes | | 5 | Sara |

我想在我的数据框中添加一个新列,其中包含true和false值,以告诉我两列是否有重复的值,但第三列是否有不同的值

这是我现在的表格:

| ID  | name | age|student|
| --- | -----|----|-------|
| 1   | Joe  |23  | Yes   |
| 2   | Rayan|13  | Yes   |
| 3   | Sara |20  | No    |
| 4   | Rayan|21  | Yes   |
| 5   | Sara |20  | Yes   |
| 6   | Joe  |23  | Yes   |
我想检查姓名和年龄是否有重复的值,但学生有不同的值。我希望生成的列如下所示:

| ID  | name | age|student|satisfy|
| --- | -----|----|-------|-------|
| 1   | Joe  |23  | Yes   | False |
| 2   | Rayan|13  | Yes   | False |
| 3   | Sara |20  | No    | False |
| 4   | Rayan|21  | Yes   | False |
| 5   | Sara |20  | Yes   | True  |
| 6   | Joe  |23  | Yes   | False |

只有Sara满足条件,因为在年龄和姓名中有重复的值,但student有不同的值。我怎样才能在R中做到这一点?

也许类似的东西可以帮助您:

df <- data.frame(
  id = c(1:6),
  name = c("Joe", "Rayan", "Sara", "Rayan", "Sara", "Joe"),
  age = c(23, 13, 20, 21, 20, 23),
  student = c("Yes", "Yes", "No", "Yes", "Yes", "Yes")
)

(df$satisfy <- duplicated(df[,2:3]) & !(duplicated(df[,2:4])))
[1] FALSE FALSE FALSE FALSE  TRUE FALSE

df使用
dplyr

library(dplyr)
df %>%
    group_by(name, age) %>% 
    mutate(ind =  n_distinct(student) > 1, 
    student = ind & duplicated(ind), ind = NULL) %>%
    ungroup
# A tibble: 6 x 4
#     id name    age student
#  <int> <chr> <dbl> <lgl>  
#1     1 Joe      23 FALSE  
#2     2 Rayan    13 FALSE  
#3     3 Sara     20 FALSE  
#4     4 Rayan    21 FALSE  
#5     5 Sara     20 TRUE   
#6     6 Joe      23 FALSE  
库(dplyr)
df%>%
按(姓名、年龄)分组%>%
突变(ind=n_独立(学生)>1,
学生=ind&重复(ind),ind=NULL)%>%
解组
#一个tibble:6x4
#身份证姓名年龄学生
#       
#1乔23错
#2 2 Rayan 13假
#3莎拉20错
#4雷恩21假
#5萨拉20真的吗
#6乔23错

这是一个简单而准确的答案。我试图将“从上一个”设置为“真”,所以Sara的两个条目都是真的,但我做不到。有没有办法做到这一点?如果名字足够好,那么我会继续使用
(df$satisfyAll%groupby(name,age)%%>%mutate(success=ifelse(n_distinct(student)=2,TRUE,FALSE))%%>%ungroup()
为什么我们需要后续操作?这两个条件都只返回逻辑向量,不知道哪些行属于同一行。您可以通过管道进入后续操作或使用match来提取重复项的名称,但为什么要尝试在一行中执行所有操作。如果我有两个以上的条目,则这不起作用。例如,一旦我添加了另一个条目呃,有莎拉20岁的那一排,结果是另一个是真的。我只想得到其中一个。