我有三个向量:
x <- c(1,1,1,1,1, 2,2,2,3,3, 3,3,3,4,4, 5,5,5,5,5 )
y <- c(2,2,1,3,2, 1,4,2,2,NA, 3,3,3,4,NA, 1,4,4,2,NA)
w <- c(1,45,NA,45,NA,45,41,45,96,25,12,NA,7,NA,4,45,12,45,32,56)
如何找到每个X(从1到5)和每个Y(从1到4)的W(不计算NA)值的数量?
输出应采用以下格式:
y x result
4 1 ...
4 2 ...
4 3
4 4
4 5
3 1
3 2
3 3
3 4
3 5
...
1 1
1 2
1 3
1 4
1 5
答案 0 :(得分:1)
在这里,您可以使用xtabs来总结w
不是NA
dd<-as.data.frame(xtabs(!is.na(w)~y+x), stringsAsFactors=F)
as.data.frame
部分根据需要将其从表格更改为长格式。唯一的问题是,xtabs
会将x
和y
转换为字符。您可以使用
dd$x <- as.numeric(dd$x)
dd$y <- as.numeric(dd$y)
然后按
排序dd <- dd[order(-dd$y,dd$x),]
答案 1 :(得分:0)
以下是使用dplyr
library(dplyr)
dat <- data.frame(
x = c(1,1,1,1,1, 2,2,2,3,3, 3,3,3,4,4, 5,5,5,5,5 ),
y = c(2,2,1,3,2, 1,4,2,2,NA, 3,3,3,4,NA, 1,4,4,2,NA),
w = c(1,45,NA,45,NA,45,41,45,96,25,12,NA,7,NA,4,45,12,45,32,56)
)
dat %>%
filter(!is.na(w)) %>%
filter(!is.na(y)) %>%
group_by(y,x) %>%
summarise(result = n())
y x result
1 1 2 1
2 1 5 1
3 2 1 2
4 2 2 1
5 2 3 1
6 2 5 1
7 3 1 1
8 3 3 2
9 4 2 1
10 4 5 2
上述内容仅为w
和x
的所有非NA级别提供了y
的非NA值数量
如果您想查看所有组合的非基准级别x
和y
,您可以先使用expand.grid
foo <- dat %>%
filter(!is.na(w)) %>%
filter(!is.na(y)) %>%
group_by(y,x) %>%
summarise(result = sum(!is.na(w)))
with(dat, expand.grid(x = unique(x),
y = unique(y))) %>%
filter(!is.na(y)) %>%
left_join(foo) %>%
arrange(desc(y))
x y result
1 1 4 NA
2 2 4 1
3 3 4 NA
4 4 4 NA
5 5 4 2
6 1 3 1
7 2 3 NA
8 3 3 2
9 4 3 NA
10 5 3 NA
11 1 2 2
12 2 2 1
13 3 2 1
14 4 2 NA
15 5 2 1
16 1 1 NA
17 2 1 1
18 3 1 NA
19 4 1 NA
20 5 1 1
这项技术可以为你提供NA&#34;结果&#34;只要x和y的因子组合不存在