r - 仅按行保留重复值
问题描述
我有一个看起来像这样的数据框:
A = c(4.3, 0.2, 3.7, 1.5, 0.5, 1.6, 2.7)
P = c(4.2, 2.1, 3.0, 2.8, 1.1, 2.3, 3.0)
T1 = c("a", "a1", "e1", "d1", "a3", "f1", "f2")
T2 = c("a", "b1", "a1", "b2", "a3", "f1", "f3")
T3 = c("c", "c1", "e1", "b2", "k1", "a4", "f3")
T4 = c(NA, "b1", "e1", "b3", "c1", "b3", "f5")
T5 = c(NA, NA, NA, NA, "d6", "a4", "f6")
T6 = c(NA, NA, NA, NA, "f4", NA, "f7")
T7 = c(NA, NA, NA, NA, NA, NA, "c1")
T8 = c(NA, NA, NA, NA, NA, NA, "c8")
T9 = c(NA, NA, NA, NA, NA, NA, "f1")
T10= c(NA, NA, NA, NA, NA, NA, "k3")
df1 <- data.frame(A, P, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
我想按行删除所有唯一值,只保留每行中的重复值,所以我想得到这个:
A = c(4.3, 0.2, 3.7, 1.5, 0.5, 1.6, 2.7)
P = c(4.2, 2.1, 3.0, 2.8, 1.1, 2.3, 3.0)
T1 = c("a", NA, "e1", NA, "a3", "f1", NA)
T2 = c("a", "b1", NA, "b2", "a3", "f1", "f3")
T3 = c(NA, NA, "e1", "b2", NA, "a4", "f3")
T4 = c(NA, "b1", "e1", NA, NA, NA, NA)
T5 = c(NA, NA, NA, NA, NA, "a4", NA)
T6 = c(NA, NA, NA, NA, NA, NA, NA)
T7 = c(NA, NA, NA, NA, NA, NA, NA)
T8 = c(NA, NA, NA, NA, NA, NA, NA)
T9 = c(NA, NA, NA, NA, NA, NA, NA)
T10= c(NA, NA, NA, NA, NA, NA, NA)
df2 <- data.frame(A, P, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
我知道该怎么做. 然后我尝试只为“T”类型的列运行代码,但它甚至没有返回数据框。这是我的第一个代码:
df2 <- as.data.frame(t(apply(df1, 1, function(x) {x[!duplicated(x)] <- NA; x})))
并尝试限制某些列的代码:
df2 <- as.data.frame(t(apply(select_if(df1, grepl("T^[0-9]+$", colnames(df1)==T)), 1, function(x) {x[!duplicated(x)] <- NA; x})))
任何建议将不胜感激,谢谢。
解决方案
您还需要指定duplicated(x, fromLast = TRUE)
以获取所有值,即
i1 <- t(apply(df1[-c(1, 2)], 1, function(i)duplicated(i)|duplicated(i, fromLast = TRUE)))
df1[-c(1, 2)][!i1] <- NA
df1
# A P T1 T2 T3 T4 T5 T6 T7 T8 T9 T10
#1 4.3 4.2 a a <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
#2 0.2 2.1 <NA> b1 <NA> b1 <NA> <NA> <NA> <NA> <NA> <NA>
#3 3.7 3.0 e1 <NA> e1 e1 <NA> <NA> <NA> <NA> <NA> <NA>
#4 1.5 2.8 <NA> b2 b2 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
#5 0.5 1.1 a3 a3 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
#6 1.6 2.3 f1 f1 a4 <NA> a4 <NA> <NA> <NA> <NA> <NA>
#7 2.7 3.0 <NA> f3 f3 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
推荐阅读
- reactjs - 如何在 React 中使用 DOMRect 和 useEffect?
- android - 在 Android 上使用 SearchManager 在片段中获取 SearchView 的结果
- java - 我无法保存文件以解析服务器
- oracle - 将 Db2 过程转换为 Oracle 过程
- c# - NopCommerce 4.30 覆盖 Register.cshtml
- rsa - 你能从RSA中的明文、密文和n中找到D吗?
- ios - 如何在本机反应中访问 IOS 的活动屏幕时间?
- python - 熊猫数据框总和相同的键
- django - Django Rest Framework + Swagger:错误 {“detail”:“CSRF 失败:CSRF 令牌丢失或不正确。” }
- snowflake-cloud-data-platform - 雪花分区中删除的工作原理