将功能应用于数据框的每一列

克里斯·鲁勒曼

我需要在多列数据框中转换数据,并想找到一种方法一次在数据框的所有列中进行转换。数值数据的数据转换似乎没有问题。例如:

df <- data.frame(
  co1 = c(5,9,6,1,6),
  co2 = c(8,5,4,6,2), 
  co3 = c(6,5,4,1,2),
  co4 = c(6,1,5,3,2),
  co5 = c(5,1,2,6,8))

我可以使用for循环一次转换所有数据(例如,将所有大于5的值标记为“是”,将所有其他值标记为“否”):

for(i in 1:ncol(df)){
  df[i] <- ifelse(df[i] > 5, "yes", "no")
}

或者,更简单地说,使用索引:

df[] <- ifelse(df > 5, "yes", "no")

但是,当我有字符数据时,这些方法不起作用。例如,我想将此数据帧中所有以“ A”开头的值转换为“是”:

df <- data.frame(
  co1 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")),
  co2 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")), 
  co3 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")),
  co4 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")),
  co5 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")))
df
  co1 co2 co3 co4 co5
1  JF  GB  ID  EB  DF
2  IA  DD  DA  IF  HD
3  HI  IH  JE  CH  FB
4  GE  JI  CJ  BA  GE
5  BG  EE  GG  AJ  BH

for循环

for(i in 1:ncol(df)){
  df[i] <- ifelse(grepl("^B", df[i]), "yes", "no")
}

以及通过索引进行转换都会产生相同的错误转换:

df[] <- ifelse(grepl("^B", df), "yes", "no")
df
  co1 co2 co3 co4 co5
1  no  no  no  no  no
2  no  no  no  no  no
3  no  no  no  no  no
4  no  no  no  no  no
5  no  no  no  no  no

对如何使用字符数据实现正确的转换有帮助吗?

jdobres

如果您想坚持以R为底,lapply可以在这里工作:

set.seed(123)
df <- data.frame(
  co1 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")),
  co2 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")), 
  co3 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")),
  co4 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")),
  co5 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")))

df2 <- as.data.frame(lapply(df, function(x) ifelse(grepl("^B", x), "yes", "no")))

  co1 co2 co3 co4 co5
1  CA  JI  IH  JE  BB
2  HE  EC  GE  IG  DC
3  DH  FA  FI  FB  ID
4  GD  IJ  JC  HC  CJ
5  FC  AF  DA  AH  AF

  co1 co2 co3 co4 co5
1  no  no  no  no yes
2  no  no  no  no  no
3  no  no  no  no  no
4  no  no  no  no  no
5  no  no  no  no  no

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将函数应用于R中数据框中的每一列

将函数应用于熊猫数据框的每一行以创建两个新列

将函数应用于熊猫数据框的每一行以创建两个新列

Python大熊猫使用Dict映射将格式化应用于数据框中的每一列

熊猫:将了解列类型的函数应用于数据框的每一列

将函数应用于pandas中数据框的每一列

将函数应用于Pandas数据框列中的每一行

将均值和标准差应用于数据表的每一列

是否将函数应用于pandas数据框的每一列而没有for循环?

将功能应用于数据框

如何将自定义函数应用于数据框的每一列

将函数应用于矩阵的每一列

将一些功能应用于列表中数据框的列

将函数应用于数据库的每一列

将功能应用于数据框列?

在熊猫中,如何将函数应用于返回两列的每一列

熊猫:将功能列表应用于列,每列一个功能

根据另一列中的值将正则表达式应用于数据框列

将功能应用于熊猫数据框的列

apply()应用于ExcelFile每个数据框的每一列,Pandas

将数据框列中的列表应用于另一列

熊猫数据框将功能应用于整个列

将功能应用于数据框的列(列为列表)

将函数应用于数据框的每一列

如何将函数应用于熊猫数据框中一列的每一行?

如何将一段 R 代码应用于数据框的每一列

将样式应用于数据框中仅一列的值

使用 if else 将公式应用于数据框的数据框的每一行

如何将 lme 函数应用于数据框的每一列?