R:是否可以将布尔数据合并到多个部分重复行的select列中?
首先,我为我的问题措辞如此可怕而道歉。我想不出一个更好、更简洁的写作方法,所以希望下面的内容能够帮助我们弄清楚——欢迎提出任何提高其清晰度的建议,以便让未来在同一问题上挣扎的人们更容易理解 我正在使用R中的数据帧,其中包含一些具有重复ID标记的行。每行有四列包含布尔值,每行只有一列注册为true,这样,如果重复ID标记,布尔值为true的列将不同。下面是我正在处理的数据的一个非常简短的示例部分: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
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很高兴这有帮助。不幸的是,你只能接受一个答案。随便挑一个你觉得最有用的。