我有一个数据集(在数据框中)。我正在使用apply向数据集添加一个新列,其中新列的行使用该行内其他列的元素执行函数。应用工程,但在将函数应用于每一行之后,它会继续超出范围,并且会一直重复应用这些值。R编程 - 防止重复结果中的“应用”与数据范围不同
这里是我开始的数据:
Abbreviation Name X Y Z A B C
JM Jim 3 4 5 6 7 8
JS Jess 5 6 7 8 9 10
使用下面的命令,我得到如下结果: 命令:
df_new$Test <- apply(df_new,1, function(row) (df_new[,8]/df_new[,6])/(df_new[,5]/df_new[,3]))
返回的数据(从View(df_new))
Abbreviation Name X Y Z A B C Test
JM Jim 3 4 5 6 7 8 .8
JS Jess 5 6 7 8 9 10 .89
.8
.89
.8
.89
另外,当我使用以下命令将这些数据写入csv时,我得到下面的输出: 命令:
write.csv(df_new,文件= “Df_new.csv”,row.names = FALSE)
Abbreviation Name X Y Z A B C Test Test.1 Test.2 Test.3
JM Jim 3 4 5 6 7 8 .8 .8 .8 .8
JS Jess 5 6 7 8 9 10 .89 .89 .89 .89
理想情况下,从上面的,我只想df_new [1: 2,1:9];但是,即使试图创建仅保留该信息的对象,仍会导致额外的行(在View(df_new)中)或额外的列(在写入.csv时)。
你能张贴'dput(df_new)的结果',使这个重现? – 2013-04-11 14:41:06
@DavidRobinson数据发布在问题中?只需使用'read.table(text =“copy/paste here,h = T)' – 2013-04-11 14:46:00
@DavidRobinson,尽管Dason的解决方案对我有用,但这是我从dput获得的。 (缩写=结构(1:2,.Label = c(“JM”, “JS”),class =“factor”),Name = structure(c(2L, 1L),.Label = c(“Jess”, “Jim”),class =“factor”),X = c(3,5),Y = c(4,6),Z = c(5, 7),A = c(6,8),B = c(7,9),C = c(8,10),Test =结构(c(0.8, 0.892857142857143,0.8,0.892857142857143),.Dim = c (2L,2L),.Dimnames = list( NULL,c(“1”,“2”)))),.Names = c(“缩写”,“名称”, “X”,“Y” “Z”,“A”,“B”,“C”,“Test”),row.names = 1:2,class =“data.frame”) – 2013-04-11 14:50:46