2017-08-16 44 views
1

我的數據下Store的結果適用功能在新列

A<-c(1999,1999, 2001, 2001) 
B<-c("A", "D", "A", "D") 
df<-data.frame (A, B) 

我申請

df$C<-apply(df[1], 2, function(x) ifelse(x > 2000, 2000, x)) 

來創建基於基準列

輸出

與價值觀的新列
 A B C 
1 1999 A 1999 
2 1999 D 1999 
3 2001 A 2000 
4 2001 D 2000 

爲什麼我噸確實複製相同的色號A,並不創建列C

+3

爲什麼你需要'apply'爲一列,只是做'DF $ C < - DF [, 1]; df [,3] [df [,1]> 2000] < - 2000' – akrun

+0

'df $ C < - pmin(df $ A,2000)' – jogo

回答

2

我們不需要一個apply環路一列,它可以與

df$C <- ifelse(df[,1] > 2000, 2000, df[,1]) 

在OP的代碼來完成,輸出的是matrix與單個列,它也有導致matrix柱dimnames爲「A」

str(df) 
#'data.frame': 4 obs. of 3 variables: 
#$ A: num 1999 1999 2001 2001 
#$ B: Factor w/ 2 levels "A","D": 1 2 1 2 
#$ C: num [1:4, 1] 1999 1999 2000 2000 
# ..- attr(*, "dimnames")=List of 2 
# .. ..$ : NULL 
# .. ..$ : chr "A" 

所以相同的列名,列已經存在,但它是一個matrix

df$C 
#  A 
#[1,] 1999 
#[2,] 1999 
#[3,] 2000 
#[4,] 2000 

而是分配matrix的,應轉換爲vector

df$C <- as.vector(apply(df[1], 2, function(x) ifelse(x > 2000, 2000, x))) 
df$C 
#[1] 1999 1999 2000 2000