r - R:你如何运行一个函数来获取多个列?
问题描述
所以我的数据看起来像这样
id first middle last Age
1 Carol Jenny Smith 15
2 Sarah Carol Roberts 20
3 Josh David Richardson 22
我有一个函数可以创建一个新列,它为您提供在我指定的先前列(第 2-4 列或“第一”:“最后”列)中为每一行找到名称的次数。我有一个函数可以输出下面的结果,
funname <- function(df, cols, value, newcolunmn) {
df$newcolumn <- as.integer(rowSums(df[cols] == value) > 0)
}
id first middle last Age Carol
1 Carol Jenny Smith 15 1
2 Sarah Carol Roberts 20 1
3 Josh David Richardson 22 0
但我的真实数据更复杂,我想创建至少 20 个新的不同列(例如:Carol、Robert、Jenny、Anna、Richard、Daniel、Eric...)那么我怎样才能将多个新列合并到现有的列中?功能?我只能考虑添加函数(df,cols,value,newcolumn1,newcolumn2,newcolumn3,...,)但是如果我以后想要一百列,这将是不可能的,..有什么帮助吗?先感谢您!:)
编辑:
function(df, cols, value, newcol) {
df$newcol <- as.integer(rowSums(df[cols] == value) > 0)
df
}
我阅读了下面的评论..但是让我改变我的问题..我将如何映射这个函数,以便我可以生成多个具有我想要分配的新名称的列?...
解决方案
如果您将数据转换为两个长向量,一个表示行号,另一个表示值,我认为这只是一个巨大的表操作:
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
推荐阅读
- javascript - 更新状态 -> 对象 -> 数组 -> 对象
- flutter - 使用 in_app_purchases 官方库在 Flutter 中使用促销代码在订阅中实现应用内促销
- css - Gulp SCSS 颜色变量到 css
- cordova - Cordova 应用程序无法打开 azure 媒体播放器视频
- angular - 如何在 Angular 中正确链接依赖的异步管道
- swift - Xcode 11.3.1 与 Firebase
- vb.net - 字符串未被识别为有效的日期时间:MyBase.Text = " / / "
- python - 集成两个函数的乘积
- javascript - 定期刷新的Vue屏幕,安全完成
- javascript - 从字符串中提取分隔的数字组