使用现有列中的值在数据框中创建新列

时间:2016-02-25 12:06:59

标签: r

附件是我正在尝试创建其他列的示例数据

Part A    B   C   D 
abc  100  30  40  50
def  0    23  24  25
ghi  21   23  45   50

我需要创建16列,即a1,a2,a3,a4,b1,b2 ...... d3,d4,a1的值为A / 4,a2 = A / 4 ... d1 = D / 4等等。

我尝试使用for循环条件

for (i in 1:4) {
    data$a[i] <- A/4
    data$b[I] <- B/4       
}

最终数据应该是这样的 具有以下格式的相应值的列名

 Part a1 a2 a3 a4 b1 b2 b3 b4...d4

2 个答案:

答案 0 :(得分:0)

这是我的解决方案:

x <- read.table(header=TRUE, text=
"Part A    B   C   D 
abc  100  30  40  50
def  0    23  24  25
ghi  21   23  45   50")

x4 <- t(apply(D[-1], 1, rep, each=4)/4)
rownames(x4) <- x$Part
colnames(x4) <- paste0(rep(c("a", "b", "c", "d"), each=4), 1:4)
x4

如果您想要数据帧,可以这样做:

x4.df <- cbind(data.frame(Part=x$Part), x4)

答案 1 :(得分:0)

使用for循环:

df <- data.frame(Part = c("abc","def","ghi"), 
                 A = c(100,0,21), 
                 B = c(30,23,23), 
                 C = c(40,24,45), 
                 D = c(50,25,50)) 

final_df <- df # Start with copy of original
for (i in 1:4) {
  new_df <- (df[,-1])/4 # create data frame with div 4 values
  names(new_df) <- paste0(names(df)[-1],i) # create col names
  final_df <- data.frame(final_df, new_df)
}


##  Part   A  B  C  D    A1   B1    C1    D1    A2   B2    C2    D2    A3
##1  abc 100 30 40 50 25.00 7.50 10.00 12.50 25.00 7.50 10.00 12.50 25.00
##2  def   0 23 24 25  0.00 5.75  6.00  6.25  0.00 5.75  6.00  6.25  0.00
##3  ghi  21 23 45 50  5.25 5.75 11.25 12.50  5.25 5.75 11.25 12.50  5.25
##    B3    C3    D3    A4   B4    C4    D4
##1 7.50 10.00 12.50 25.00 7.50 10.00 12.50
##2 5.75  6.00  6.25  0.00 5.75  6.00  6.25
##3 5.75 11.25 12.50  5.25 5.75 11.25 12.50