R:是否可以将布尔数据合并到多个部分重复行的select列中?

R:是否可以将布尔数据合并到多个部分重复行的select列中?,r,dataframe,duplicates,boolean,aggregate,R,Dataframe,Duplicates,Boolean,Aggregate,首先,我为我的问题措辞如此可怕而道歉。我想不出一个更好、更简洁的写作方法,所以希望下面的内容能够帮助我们弄清楚——欢迎提出任何提高其清晰度的建议,以便让未来在同一问题上挣扎的人们更容易理解 我正在使用R中的数据帧,其中包含一些具有重复ID标记的行。每行有四列包含布尔值,每行只有一列注册为true,这样,如果重复ID标记,布尔值为true的列将不同。下面是我正在处理的数据的一个非常简短的示例部分: dbsid l_e l_d n_e b_c CCH00090

首先,我为我的问题措辞如此可怕而道歉。我想不出一个更好、更简洁的写作方法,所以希望下面的内容能够帮助我们弄清楚——欢迎提出任何提高其清晰度的建议,以便让未来在同一问题上挣扎的人们更容易理解

我正在使用R中的数据帧,其中包含一些具有重复ID标记的行。每行有四列包含布尔值,每行只有一列注册为true,这样,如果重复ID标记,布尔值为true的列将不同。下面是我正在处理的数据的一个非常简短的示例部分:

dbsid     l_e      l_d      n_e      b_c
CCH00090  TRUE     FALSE    FALSE    FALSE
CCH00091  FALSE    FALSE    TRUE     FALSE
CCH00090  FALSE    TRUE     FALSE    FALSE
我希望以以下方式结束(尽管规模要大得多):

但我们无法找到任何方法来产生这样的产出。请注意,在重复条目的情况下,布尔数据已被组合,以便将真值保留在假值之上。我一直在研究聚合函数,但没能强迫它执行上述操作


有可能吗?感谢您抽出时间阅读我的问题

对于所有变量,您可以在具有相同的
dbsid
的所有行上应用
any
函数

library(data.table)
setDT(df)

df[, lapply(.SD, any), by = dbsid]

#       dbsid   l_e   l_d   n_e   b_c
# 1: CCH00090  TRUE  TRUE FALSE FALSE
# 2: CCH00091 FALSE FALSE  TRUE FALSE
使用的数据

df <- fread("dbsid     l_e      l_d      n_e      b_c
CCH00090  TRUE     FALSE    FALSE    FALSE
CCH00091  FALSE    FALSE    TRUE     FALSE
CCH00090  FALSE    TRUE     FALSE    FALSE")

df您可以使用
dplyr中的
summary\u all
完成此操作:

library(dplyr)

df %>%
  group_by(dbsid) %>%
  summarize_all(sum)
结果:

# A tibble: 2 x 5
     dbsid   l_e   l_d   n_e   b_c
    <fctr> <int> <int> <int> <int>
1 CCH00090     1     1     0     0
2 CCH00091     0     0     1     0
# A tibble: 2 x 5
     dbsid   l_e   l_d   n_e   b_c
    <fctr> <lgl> <lgl> <lgl> <lgl>
1 CCH00090  TRUE  TRUE FALSE FALSE
2 CCH00091 FALSE FALSE  TRUE FALSE
df = structure(list(dbsid = structure(c(1L, 2L, 1L), .Label = c("CCH00090", 
"CCH00091"), class = "factor"), l_e = c(TRUE, FALSE, FALSE), 
    l_d = c(FALSE, FALSE, TRUE), n_e = c(FALSE, TRUE, FALSE), 
    b_c = c(FALSE, FALSE, FALSE)), .Names = c("dbsid", "l_e", 
"l_d", "n_e", "b_c"), class = "data.frame", row.names = c(NA, 
-3L))
结果:

# A tibble: 2 x 5
     dbsid   l_e   l_d   n_e   b_c
    <fctr> <int> <int> <int> <int>
1 CCH00090     1     1     0     0
2 CCH00091     0     0     1     0
# A tibble: 2 x 5
     dbsid   l_e   l_d   n_e   b_c
    <fctr> <lgl> <lgl> <lgl> <lgl>
1 CCH00090  TRUE  TRUE FALSE FALSE
2 CCH00091 FALSE FALSE  TRUE FALSE
df = structure(list(dbsid = structure(c(1L, 2L, 1L), .Label = c("CCH00090", 
"CCH00091"), class = "factor"), l_e = c(TRUE, FALSE, FALSE), 
    l_d = c(FALSE, FALSE, TRUE), n_e = c(FALSE, TRUE, FALSE), 
    b_c = c(FALSE, FALSE, FALSE)), .Names = c("dbsid", "l_e", 
"l_d", "n_e", "b_c"), class = "data.frame", row.names = c(NA, 
-3L))

谢谢你,瑞安!我刚刚将您的解决方案应用于我的整个数据集,它工作得完美无缺。感谢用户-我已经尝试了应用于我的整个数据集的两种解决方案,它们都工作得很好@T.Zaborniak很高兴这有帮助。不幸的是,你只能接受一个答案。随便挑一个你觉得最有用的。