用R数据帧中的一个替换行的两个值

时间:2014-11-27 07:01:28

标签: r

这可能是一项非常简单的任务,但在执行此操作时遇到了麻烦。对不起,如果这是一个愚蠢的问题,但是经过这么多尝试后我会问这里。

我有399个文件名为prediction1,prediction2,.....等等,每个文件包含两个值,如

在文件predition1

0.1234 -1.2345

文件预测2中的

-1.5443 0.34436

.....所以

使用

将这些文件导入到R.
filelist = list.files(pattern = "pred*")
myfiles = lapply(filelist, read.table)

并使用以下命令将“myfiles”转换为数据框:

myfiles2 = as.data.frame(myfiles)

现在myfiles2包含:

> myfiles2[1]
  V1
1 -1
2 -1

最多399次。

现在我必须应用一些条件,例如if(myfiles2[1][1,]>0 & myfiles2[1][2,]<0)然后replace the values with numeric "1001" and if(myfiles2 [1] [1,]&lt; 0&amp; myfiles2 [1] [2,]&gt; 0)然后将数值替换为数字“0110”..

任何人都可以建议我这样做的正确方法,实际上我能够在R控制台中打印值但不能在任何对象中获取值,以便我可以合并所有以制作一个矩阵。

我希望比以前更好地讨论我的问题。

for(i in 1:399)
{
ab = NULL;
    if(myfiles2[i][1,]>0 & myfiles2[i][2,]<0)
    {
    myfiles2[i] = "1001"    
    } 
        if(myfiles2[i][1,]>0 & myfiles2[i][2,])>0)
        {
        myfiles2[i] = "1010"

        } 
    if(myfiles2[i][1,]<0 & myfiles2[i][2,]<0)
    {
        myfiles2[i] = "0101"
    } 
        else 
        {
        myfiles2[i] = "0110"
        }
ab = append(ab, myfiles[i])
}

这是我正在使用的代码并获得最后一个替换值,基本上附加是我认为的问题

2 个答案:

答案 0 :(得分:0)

尝试

d1 <- cbind(expand.grid(rep(list(c(-1,1)),2)),
         Var3=c('0101', '1001', '0110', '1010'),stringsAsFactors=FALSE)
myfiles2[] <-  lapply(myfiles2, function(x) {
                    x[] <-d1[!colSums(t(d1[,-3])!=sign(x)),3]
                x})
myfiles2[1:3]
#    V1   V2   V3
#1 0110 1010 0110
#2 0110 1010 0110

数据

 set.seed(22)
 myfiles2 <- as.data.frame(matrix(rnorm(100), nrow=2))
 myfiles2[1:3]
 #          V1        V2         V3
 #1 -0.5121391 1.0078262 -0.2089594
 #2  2.4851837 0.2928146  1.8580924

答案 1 :(得分:0)

尝试使用此方法加载数据:

filelist = list.files(pattern = "pred*")
myfiles <- do.call('rbind', lapply(filelist, read.table))

应该直接进入数据框架。那么这应该是你的新专栏。

myfiles$newcol <- ifelse(V1 > 0 & V2 < 0, 1001, NA)
myfiles$newcol <- ifelse(V1 > 0 & V2 > 0, 1010, newcol)

等等,用你的if语句。