这可能是一项非常简单的任务,但在执行此操作时遇到了麻烦。对不起,如果这是一个愚蠢的问题,但是经过这么多尝试后我会问这里。
我有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])
}
这是我正在使用的代码并获得最后一个替换值,基本上附加是我认为的问题
答案 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语句。