R:如何运行函数来获取多个列?

R:如何运行函数来获取多个列?,r,function,apply,R,Function,Apply,我的数据是这样的 id first middle last Age 1 Carol Jenny Smith 15 2 Sarah Carol Roberts 20 3 Josh David Richardson 22 我有一个函数,可以创建一个新列,它可以告诉您在我指定的第二列到第四列或“第一列”:“最后一列”的前几列中找到每行名称的次数。我有一个输出以下结果的函数 funname <- function(

我的数据是这样的

   id first  middle  last       Age
    1 Carol  Jenny   Smith      15
    2 Sarah  Carol   Roberts    20
    3 Josh   David   Richardson 22
我有一个函数,可以创建一个新列,它可以告诉您在我指定的第二列到第四列或“第一列”:“最后一列”的前几列中找到每行名称的次数。我有一个输出以下结果的函数

funname <- function(df, cols, value, newcolunmn) {
  df$newcolumn <- as.integer(rowSums(df[cols] == value) > 0)
}
但我的真实数据更复杂,我想创建至少20个新的、不同的专栏,例如:卡罗尔、罗伯特、珍妮、安娜、理查德、丹尼尔、埃里克。。。 那么,如何将多个新列合并到现有函数中呢? 我只能考虑添加函数df,cols,value,newcolumn1,newcolumn2,newcolumn3,…,但是如果我以后想添加100个列,这是不可能的,…有什么帮助吗?提前谢谢你!:

编辑:

我读了下面的评论,但让我改变我的问题。。
如何映射此函数,以便生成多个具有要分配的新名称的列?。

如果将数据转换为两个长向量,一个表示行号,另一个表示值,我认为这只是一个巨大的表操作:

tab <- as.data.frame.matrix(table(row(dat[2:4]), unlist(dat[2:4])))
cbind(dat, tab)
#  id first middle       last Age Carol David Jenny Josh Richardson Roberts Sarah Smith
#1  1 Carol  Jenny      Smith  15     1     0     1    0          0       0     0     1
#2  2 Sarah  Carol    Roberts  20     1     0     0    0          0       1     1     0
#3  3  Josh  David Richardson  22     0     1     0    1          1       0     0     0
如果需要,此方法还允许您将新的输出列映射到名称的变体:

tab <- as.data.frame.matrix(table(row(dat[2:4]), unlist(dat[2:4])))
dat[paste0(colnames(tab),"_n")] <- tab
dat
#  id first middle       last Age Carol_n David_n Jenny_n Josh_n Richardson_n Roberts_n Sarah_n Smith_n
#1  1 Carol  Jenny      Smith  15       1       0       1      0            0         0       0       1
#2  2 Sarah  Carol    Roberts  20       1       0       0      0            0         1       1       0
#3  3  Josh  David Richardson  22       0       1       0      1            1         0       0       0

演示如何执行此操作。另外,你可以用类似的方式来适应上面提到的问题。顺便说一下,如果Ronak Shah以前的回答解决了这个问题,您应该单击他回答旁边的“接受”复选标记,让人们知道找到了解决方案。@eipi10找到了!非常感谢。嗯…我在帖子中写的函数不是很安静。如果有人能帮忙,请帮忙!请使用dput提供一个数据示例,例如,将dputdf[1:3]的输出粘贴到问题中,并将您正在运行的代码粘贴到问题中,以尝试添加多个列。我认为,如果您将数据转换为两个长向量,一个表示行号,另一个表示值,那么这只是一个巨大的表操作。例如:tablerowdat[2:4],unlistdat[2:4]按照通常的长格式,“整洁”数据在概念上更容易处理,无论您是否使用“整洁”软件包。。。。
tab <- as.data.frame.matrix(table(row(dat[2:4]), unlist(dat[2:4])))
cbind(dat, tab)
#  id first middle       last Age Carol David Jenny Josh Richardson Roberts Sarah Smith
#1  1 Carol  Jenny      Smith  15     1     0     1    0          0       0     0     1
#2  2 Sarah  Carol    Roberts  20     1     0     0    0          0       1     1     0
#3  3  Josh  David Richardson  22     0     1     0    1          1       0     0     0
tab <- as.data.frame.matrix(table(row(dat[2:4]), unlist(dat[2:4])))
dat[paste0(colnames(tab),"_n")] <- tab
dat
#  id first middle       last Age Carol_n David_n Jenny_n Josh_n Richardson_n Roberts_n Sarah_n Smith_n
#1  1 Carol  Jenny      Smith  15       1       0       1      0            0         0       0       1
#2  2 Sarah  Carol    Roberts  20       1       0       0      0            0         1       1       0
#3  3  Josh  David Richardson  22       0       1       0      1            1         0       0       0