如何跨data.frame的列应用函数?

如何跨data.frame的列应用函数?,r,R,假设我有一个数据框,上面有这样的数值 AA01.AVG_Beta AA02.AVG_Beta AA03.AVG_Beta AA04.AVG_Beta AA05.AVG_Beta 1 0.15851770 0.44264830 0.46662180 0.79579230 0.555430100 2 0.87148450 0.93462340 0.92591830 0.93812860 0.942683400 3 0.6090706

假设我有一个数据框,上面有这样的数值

AA01.AVG_Beta AA02.AVG_Beta AA03.AVG_Beta AA04.AVG_Beta AA05.AVG_Beta
1     0.15851770    0.44264830    0.46662180    0.79579230   0.555430100
2     0.87148450    0.93462340    0.92591830    0.93812860   0.942683400
3     0.60907060    0.92463760    0.62698660    0.86852790   0.457659300
4     0.10728340    0.07848221    0.06340047    0.08589865   0.118239800
5     0.72353630    0.91198210    0.87339600    0.88050440   0.902925300
6     0.52616050    0.57114700    0.29431990    0.56032260   0.530103800
7     0.50321330    0.78129660    0.26986880    0.77825860   0.924097500
8     0.47808630    0.11267250    0.30519660    0.36128510   0.741012600
9     0.17698960    0.11461960    0.57776080    0.37801670   0.465766500
10    0.01268375    0.01370702    0.01194124    0.01227029   0.009222724
我想使用这些条件将每行中的所有数值更改为字母

平均β0-0.2改为AA, 平均β0.4-0.6改为AB, 平均β0.8-1改为BB

所以我写了这样的东西

apply(table, 2, function(x) ifelse (x>0 & x< 0.2, "AA",ifelse(x>0.4 & x<0.6,"AB",
+ "BB"))  )
只有第一列 也许我遗漏了一些与for循环相关的内容


提前感谢

您可以使用
cut

x <- c(0.15,0.2,0.4,0.6,0.8,1.0)
cut(x,c(0,0.2,0.4,0.6,0.8,1.0),labels=c("AA",NA,"AB",NA,"BB"))
[1] AA   AA   <NA> AB   <NA> BB  
Levels: AA <NA> AB <NA> BB
Warning message:
In `levels<-`(`*tmp*`, value = c("AA", NA, "AB", NA, "BB")) :
  duplicated levels will not be allowed in factors anymore

x使用
sapply
而不是
apply

sapply(dat, function(x) 
      ifelse (x>0 & x< 0.2, "AA",ifelse(x>0.4 & x<0.6,"AB", "BB"))
)

      AA01.AVG_Beta AA02.AVG_Beta AA03.AVG_Beta AA04.AVG_Beta AA05.AVG_Beta
 [1,] "AA"          "AB"          "AB"          "BB"          "AB"         
 [2,] "BB"          "BB"          "BB"          "BB"          "BB"         
 [3,] "BB"          "BB"          "BB"          "BB"          "AB"         
 [4,] "AA"          "AA"          "AA"          "AA"          "AA"         
 [5,] "BB"          "BB"          "BB"          "BB"          "BB"         
 [6,] "AB"          "AB"          "BB"          "AB"          "AB"         
 [7,] "AB"          "BB"          "BB"          "BB"          "BB"         
 [8,] "AB"          "AA"          "BB"          "BB"          "BB"         
 [9,] "AA"          "AA"          "AB"          "BB"          "AB"         
[10,] "AA"          "AA"          "AA"          "AA"          "AA"       
重新创建数据:

dat <- read.table(text="
AA01.AVG_Beta AA02.AVG_Beta AA03.AVG_Beta AA04.AVG_Beta AA05.AVG_Beta
1     0.15851770    0.44264830    0.46662180    0.79579230   0.555430100
2     0.87148450    0.93462340    0.92591830    0.93812860   0.942683400
3     0.60907060    0.92463760    0.62698660    0.86852790   0.457659300
4     0.10728340    0.07848221    0.06340047    0.08589865   0.118239800
5     0.72353630    0.91198210    0.87339600    0.88050440   0.902925300
6     0.52616050    0.57114700    0.29431990    0.56032260   0.530103800
7     0.50321330    0.78129660    0.26986880    0.77825860   0.924097500
8     0.47808630    0.11267250    0.30519660    0.36128510   0.741012600
9     0.17698960    0.11461960    0.57776080    0.37801670   0.465766500
10    0.01268375    0.01370702    0.01194124    0.01227029   0.009222724
")

你需要使用
lappy
sapply
而不是
apply
你还应该使用
cut
-你的嵌套ifelse函数很可能是错误的。这不是我真正想要的,我需要与我自己的函数相同的更改,但适用于所有列,thanksAs@Andrie说,直到最近,使用
sapply
@tylerlinker
textConnection
是我们所有人都这么做的方式。参数
text=…
read.table
是R2.14.0Off-topic中的一项新功能,但我喜欢您使用read.table(text=”“)读入数据。我一直在使用:
ascihi!这很好,但是有没有方法返回数据帧?我的意思是,新表允许类
矩阵
。我想要一个
data.frame
而不使用
as.data.frame
sapply(dat, function(x) 
      ifelse (x>0 & x< 0.2, "AA",ifelse(x>0.4 & x<0.6,"AB", "BB"))
)

      AA01.AVG_Beta AA02.AVG_Beta AA03.AVG_Beta AA04.AVG_Beta AA05.AVG_Beta
 [1,] "AA"          "AB"          "AB"          "BB"          "AB"         
 [2,] "BB"          "BB"          "BB"          "BB"          "BB"         
 [3,] "BB"          "BB"          "BB"          "BB"          "AB"         
 [4,] "AA"          "AA"          "AA"          "AA"          "AA"         
 [5,] "BB"          "BB"          "BB"          "BB"          "BB"         
 [6,] "AB"          "AB"          "BB"          "AB"          "AB"         
 [7,] "AB"          "BB"          "BB"          "BB"          "BB"         
 [8,] "AB"          "AA"          "BB"          "BB"          "BB"         
 [9,] "AA"          "AA"          "AB"          "BB"          "AB"         
[10,] "AA"          "AA"          "AA"          "AA"          "AA"