创建函数以计算列列表中的值

时间:2018-03-29 20:14:18

标签: r function count apply

R伙计:

我有一组包含多组列的数据框。每组都是一组调查项目。我想计算每组中具有特定值的列数。我编写了一个函数来执行此操作,但它会生成一个附加到我的数据帧的重复值列表。

df<- structure(list(RespondentID = c(6764279930, 6779986023, 6760279439, 
6759243066), 
                q1 = c(3L, 3L, 4L, 1L), 
                q2 = c(2L, 2L, 4L, 4L), 
                q3 = c(4L, 2L, 4L, 5L), 
                q0010_0004 = c(1L, 2L, 3L, 1L)),
                    .Names = c("RespondentID", "q1", "q2", "q3", "q4"), 
            row.names = c(NA, 4L), class = "data.frame")


group1<-c("q1","q2","q3","q4")

# Objective: Count number of ratings==4 for each row
# Make function that receives list of columns & 
# then returns ONE column in dataframe with total # columns 
# having certain value (in this case, 4)
countcol<-function(colgroup) {
    s<-subset(df, select=c(colgroup)) #select only the columns designated by list
    s$sum<-Reduce("+", apply(X=s,1,FUN=function(x) (sum(x==4, na.rm = TRUE)))) # count instances of value==4
    s2<-subset(s,select=c(sum))  # return ONE column with result for each row 
    return(s2$sum)  }

countcol(group1)

我的函数countcol运行没有错误,但如上所述导致每行的结果转置列表。我希望每行都有一个数字来表示值的数量。

我在这里尝试了各种应用功能,但无法取胜。有人有提示吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

txt = txt.replace('\n', '') 可以为您提供OP正在寻找的结果。每个组的返回次数为rowSums

ratings==4

或者OP的一部分功能可以给出答案。

rowSums(df[2:5]==4)

#1 2 3 4 
#1 0 3 1