2017-06-03 65 views
1
mydat = data.frame(Q1 = c(0, 1, 0, 1), Q2 = c(0, 1, 1, 1), 
        Q3 = c(1, 1, 1, 1), Gender = c("M", "M", "F", "F")) 
> mydat 
    Q1 Q2 Q3 Gender 
1 0 0 1  M 
2 1 1 1  M 
3 0 1 1  F 
4 1 1 1  F 

> table(mydat[,1:3], mydat$Gender) 

Error in sort.list(y) : 'x' must be atomic for 'sort.list' 
Have you called 'sort' on a list? 

我有一个非常简单的数据集,包含3个二元问题和一个性别变量。我很想看看这三个问题与性别之间是否有任何关联,所以我想将我的数据列入一个3(问题)×2(性别)数表。我希望我的表看起来像这样R:如何使用表来列表m x n数据

 Q1 Q2 Q3 
M  1  1  2 
F  1  2  2 

编辑:

mydat = data.frame(Q1 = c(0, 1, NA, 1), Q2 = c(0, 1, 1, 1), 
        Q3 = c(1, NA, 1, 1), Gender = c("M", "M", "F", "F")) 

> rowsum(mydat[1:3], mydat$Gender) 
    Q1 Q2 Q3 
F NA 2 2 
M 1 1 NA 

回答

0

我们可以通过手术做一组,sum等栏目

library(dplyr) 
mydat %>% 
    group_by(Gender) %>% 
    summarise_all(funs(sum(., na.rm = TRUE))) 
# A tibble: 2 x 4 
# Gender Q1 Q2 Q3 
# <fctr> <int> <int> <int> 
#1  F  1  2  2 
#2  M  1  1  2 

的要素或使用base R

rowsum(mydat[-4], mydat$Gender, na.rm = TRUE) 
# Q1 Q2 Q3 
#F 1 2 2 
#M 1 1 2 
+0

谢谢。我有一个后续问题,如果我的数据集包含一些“NA”,并且我不想让这些影响我的制表,我应该怎么做? – Adrian

+0

@Adrian在这种情况下,使用'sum'中的'na.rm = TRUE',即'mydat%>%group_by(Gender)%>%summarise_all(funs(sum(。,na.rm = TRUE)))''它也可以用在'rowsum'中 – akrun

+0

对不起,我还有一个问题。假设我只想要一个2x和两性的表。 'rowsum(mydat [1],mydat $ Gender,na.rm = TRUE)'只给我一个2x1表。 – Adrian

相关问题