※ 引述《Rose9305 (台产零零柒)》之铭言:
: [问题类型]:
: 程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
: [软件熟悉度]:
: 新手(没写过程式,R 是我的第一次)
: [问题叙述]:
: 资料转换
: 我有个资料csv档,里面内容大概如下 :
: x y z
: 55 0.2 1
: 44 0.6 1
: 78 0.7 0
: 46 0.8 0
: 98 0.9 1
: 47 0.4 1
: 46 0.5 1
: 想(限)用 ''for 循环''转换成只取x,z并以z重排x,如下:
: 1 55 44
: 0 78 46
: 1 98 47 46
: 把 z=1 排成一列,一遇到 z=0 又排成一列,再读到1又排成一列这样下去
: 不知道要如何用for循环来把资料转换成上述。
刚好看到这个问题蛮有趣的!顺便加了两笔record来测试
x y z
13 0.43 0
33 0.33 1
暴力解法, 直接实作你的逻辑,
目前想不到其他解法,感觉可以用建立指标的方式来判断资料输出,
如果其他版友有其他想法或指正欢迎讨论!
path = "your_data_path"
data=read.csv(path)
a=NULL
for(i in 1:nrow(data)){
x = data[i,1]
z = data[i,3]
#inintialize
if(is.null(a)){
a = c(z,x)
if(is.na(data[i+1,3])||data[i+1,3]!=a[1]){
print(a)
a = NULL #return
}
}
else if(a[1]==1){
a = c(a,x)
if(is.na(data[i+1,3])||data[i+1,3]!=1){
print(a)
a = NULL #return
}
}
else if(a[1]==0){
a = c(a,x)
if(is.na(data[i+1,3])||data[i+1,3]!=0){
print(a)
a = NULL #return
}
}
}
##output:
##append some test data after sample
## [1] 1 55 44
## [1] 0 78 46
## [1] 1 98 47 46
## [1] 0 13
## [1] 1 33