首页 > 解决方案 > 如何使用apply()根据R中不同列中的条件添加新列

问题描述

我正在尝试使用 R 根据来自不同列的值创建一个新列。以下是 data.frame 的示例:

df<-data.frame(well=c("A01","A02","A03","B01","B02","B03","C01","C02","C03"))
df 
  well
1  A01
2  A02
3  A03
4  B01
5  B02
6  B03
7  C01
8  C02
9  C03

我是使用该apply()函数的新手,所以我想知道如何编写一个代码,根据“井”列中的值创建一个名为“行”的新列。

我要实现的目标如下所示:

df2<-data.frame(well=c("A01","A02","A03","B01","B02","B03","C01","C02","C03"),
row=c("1","1","1","2","2","2","3","3","3")
df2
  well  row
1  A01   1
2  A02   1
3  A03   1
4  B01   2
5  B02   2
6  B03   2
7  C01   3
8  C02   3
9  C03   3

“井”列中的字母是“行”列中的值所依赖的,这就是导致我出现问题的原因。所以“Axx”会产生“1”,“Bxx”会产生2,依此类推。

标签: rapply

解决方案


这是一个想法。我们可以使用gsubwell列中获取字母,转换为因子,然后再转换为数值。

# Create example data frame
df<-data.frame(well=c("A01","A02","A03","B01","B02","B03","C01","C02","C03"),
               stringsAsFactors = FALSE)

df$row <- as.numeric(factor(gsub("[0-9]*", "", df$well)))

df
#   well row
# 1  A01   1
# 2  A02   1
# 3  A03   1
# 4  B01   2
# 5  B02   2
# 6  B03   2
# 7  C01   3
# 8  C02   3
# 9  C03   3

推荐阅读