我有这样的数据
DELETE FROM user_assignments
我有3组,每组有3列,分别称为X,T和P。
我试图找出每组中有多少行与另一组重叠,以及每组中有多少行与另一组不同。 (每组的每一行至少必须有2个值)
所以我正在寻找这样的输出
df<-structure(list(X1 = c(37L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, NA,
11L, 12L), X2 = c(40L, NA, 35L, 35L, 35L, 34L, NA, 28L, 28L,
NA, 25L, 24L), X3 = c(60L, 44L, 49L, 41L, NA, NA, NA, 25L, 26L,
NA, NA, 22L), T1 = c(19L, 55L, 47L, 46L, 36L, 42L, 25L, NA, 33L,
42L, 50L, 22L), T2 = c(75L, NA, 32L, 44L, 27L, 31L, 17L, NA,
18L, 45L, 10L, 11L), T3 = c(5L, 6L, 7L, 8L, 9L, 10L, 11L, NA,
46L, 36L, 42L, NA), P1 = c(2L, 2L, 3L, 4L, 2L, 6L, 7L, 8L, 9L,
NA, 1L, 12L), P2 = c(40L, 44L, 4L, 2L, 1L, 1L, NA, 1L, 1L, 1L,
5L, 55L), P3 = c(1L, 44L, 49L, 3L, NA, NA, NA, 25L, 26L, NA,
NA, 66L)), class = "data.frame", row.names = c(NA, -12L))
这意味着我有10行X1,X2和X3,它们至少具有2个值,并且它们在组T中的值(T1,T2,T3)。有一行完全为空或只有1个值,但它们在T组中具有值。 其他组合相同
答案 0 :(得分:0)
这个问题仍然是模棱两可和狭窄的,但这是整理数据的一般思路,以便可以轻松总结不同的组和/或行:
library(tidyverse)
df %>%
as_tibble %>%
rowid_to_column %>%
gather(select=-rowid) %>%
separate(key, into=c('group', 'column'), sep=1) %>%
group_by(group)
答案 1 :(得分:0)
根据John Colby的回答延伸,您可以总结出每个字母列中填充有2个或更多非NA值的行:
<cfset stringWithoutLink = reReplaceNoCase(string, "\s*https?://[a-z0-9/_-]+", "", "all") />
然后使用它在字母之间进行比较。例如,在这里,我看到X和T列中9行的填充/未填充状态相同。这两个字母之间的三行(7、8和10)的填充状态不同。
library(tidyverse)
df_summarized <- df %>%
rowid_to_column() %>%
gather(colname, value, -rowid) %>%
separate(colname, into = c("letter", "number"), sep = 1) %>%
count(rowid, letter, wt = !is.na(value), name = "num_values") %>%
mutate(populated = num_values >= 2)
> df_summarized
# A tibble: 36 x 4
rowid letter num_values populated
<int> <chr> <int> <lgl>
1 1 P 3 TRUE
2 1 T 3 TRUE
3 1 X 3 TRUE
4 2 P 3 TRUE
5 2 T 2 TRUE
6 2 X 2 TRUE
7 3 P 3 TRUE
8 3 T 3 TRUE
9 3 X 3 TRUE
10 4 P 3 TRUE
# ... with 26 more rows
我们可以像这样查询数据以获取重叠和不重叠:
> df_summarized %>%
+ select(-num_values) %>%
+ spread(letter, populated)
# A tibble: 12 x 4
rowid P T X
<int> <lgl> <lgl> <lgl>
1 1 TRUE TRUE TRUE
2 2 TRUE TRUE TRUE
3 3 TRUE TRUE TRUE
4 4 TRUE TRUE TRUE
5 5 TRUE TRUE TRUE
6 6 TRUE TRUE TRUE
7 7 FALSE TRUE FALSE # T but no X
8 8 TRUE FALSE TRUE # X but no T
9 9 TRUE TRUE TRUE
10 10 FALSE TRUE FALSE # T but no X
11 11 TRUE TRUE TRUE
12 12 TRUE TRUE TRUE