我正在处理一些我感兴趣的调查数据,但遇到了一个小问题。有一些问题要求受访者从候选人中选出前三名...
例如,
这是水果列表,您可以从中选择3种。 1)香蕉2)苹果3)葡萄柚4)桃5)西瓜
,然后,多个受访者对该问题给出了不同的答案。
以及负责清理调查数据的人将其分为三列,每一列代表被访者做出的三种选择之一。
Q1_1 Q2_2 Q3_3
a 1 3 4
b 1 2 5
c 3 4 NA
Banana Apple Grapefruit Peach Watermelon
a 1 0 1 1 0
b 1 1 0 0 1
c 0 0 1 1 0
请告诉我是否有任何好的方法!我也很想知道是否有指定用于此类事件的R包。
答案 0 :(得分:1)
我建议使用dplyr
和gather()
将三个水果变量转换为单个long变量。请注意,在我的玩具示例中,每个受访者可能都有来自sample()
的重复水果响应,因此我删除了重复的行。
df <- data.frame(id=1:100,
fruit1=sample(c('banana','apple','grape','peach','watermelon'),100,T),
fruit2=sample(c('banana','apple','grape','peach','watermelon'),100,T),
fruit3=sample(c('banana','apple','grape','peach','watermelon'),100,T),
outcome=runif(100))
# find respondents with duplicated fruits (eg, putting apple twice)
dupl <- df %>% gather(k,v,-id,-outcome) %>%
count(id,v)
# only keep one of the duplicated rows
df1 <- df %>% gather(k,v,-id,-outcome) %>% left_join(dupl) %>%
group_by(id,v,n) %>% slice(1) %>% select(-n)
lm(outcome~v,df1)
Call:
lm(formula = outcome ~ v, data = df1)
Coefficients:
(Intercept) vbanana vgrape vpeach vwatermelon
0.482981 -0.023715 0.020129 0.008117 -0.053460