使用R在csv中进行数据操作

使用R在csv中进行数据操作,r,csv,reshape2,R,Csv,Reshape2,我目前正在处理由eyelink生成的数据。csv(从asc转换而来)基本上是一个大的顺序列表,即未创建列,因此,例如,一行将具有“试验1”,下一行将具有x和y坐标,并且在到达试验2行之前,下一N行也将具有x和y坐标 我想知道是否有人对如何操作这些“堆叠”数据并将其转换为长格式数据有什么建议 以下是从csv中提取数据并放入R中的数据框时的数据外观。它仅识别1个变量和N个观察值: > MSG.12892743.start_trial.1.SCNB 1 12892743 757.0

我目前正在处理由eyelink生成的数据。csv(从asc转换而来)基本上是一个大的顺序列表,即未创建列,因此,例如,一行将具有“试验1”,下一行将具有x和y坐标,并且在到达试验2行之前,下一N行也将具有x和y坐标

我想知道是否有人对如何操作这些“堆叠”数据并将其转换为长格式数据有什么建议

以下是从csv中提取数据并放入R中的数据框时的数据外观。它仅识别1个变量和N个观察值:

> MSG.12892743.start_trial.1.SCNB
1   12892743      757.0   361.7  5916.0 ... SCNB
2   MSG 12892744 PreBeep1_1st_Sketchpad SCNB
3   12892744      756.7   361.7  5920.0 ... SCNB
4   12892745      756.1   362.2  5924.0 ... SCNB
5   MSG 12892746 order of frames:   SCNB
6   12892746      755.8   362.3  5928.0 ... SCNB
7   12892747      756.7   362.3  5927.0 ... SCNB
8   MSG 12892748 crosshair  SCNB
9   12892748      757.8   361.8  5928.0 ... SCNB
10  12892749      758.4   361.8  5930.0 ... SCNB
11  MSG 12892750 sketchpad  SCNB
12  12892750      758.1   361.7  5934.0 ... SCNB
13  12892751      758.3   361.7  5938.0 ... SCNB
14  MSG 12892752 sketchpad  SCNB
15  12892752      759.1   361.9  5948.0 ... SCNB
16  12892753      760.4   362.7  5956.0 ... SCNB
17  MSG 12892754 sketchpad  SCNB
理想情况下,我希望有单独的专栏:

  • 试验ID(如上所示的SCNB)
  • 帧ID(上面的第一张草图)
  • X-CoOr(757.0以上)
  • Y-CoOr(361.7以上)
  • 时间(5916.0以上)
编辑:请求的原始数据示例:

MSG 5410895 start_trial                         
MSG 5410895 PreBeep1_1st_Sketchpad                          
5410895 651.6   524.6   4372    ...             
5410896 651.6   525.3   4376    ...             
MSG 5410897 order of frames:                            
5410897 651.7   525.5   4377    ...             
5410898 651.8   525.9   4378    ...             
MSG 5410899 crosshair                           
5410899 652.1   526.1   4376    ...             
5410900 652.5   526 4373    ...             
MSG 5410901 sketchpad                           
5410901 653 525.6   4370    ...             
5410902 652.2   525.3   4366    ...             
MSG 5410903 sketchpad                           
5410903 651.1   524.7   4364    ...             
5410904 650.9   524.2   4366    ...             
MSG 5410905 sketchpad                           
5410905 651.6   523.7   4368    ...             
5410906 651.8   524 4369    ...             
MSG 5410907 buffer1                         
5410907 651.3   524.7   4373    ...             
5410908 650.7   525.4   4377    ...             
5410909 651.2   525.9   4383    ...             
MSG 5410910 Diode1                          
5410910 651.7   525.5   4384    ...             
5410911 652.1   525.4   4378    ...             
5410912 652 525.5   4372    ...             
5410913 651.9   526 4365    ...             
5410914 651.8   526.3   4363    ...             
5410915 651.6   527 4362    ...             
5410916 651.5   527.7   4362    ...             
5410917 652 528.6   4365    ...             
5410918 652.5   528.8   4369    ...             
5410919 653 528.3   4371    ...             
5410920 652.9   527.1   4371    ...             
5410921 652.8   525.9   4371    ...             
5410922 652.8   524.3   4378    ...             
5410923 652.3   523.1   4388    ...             
5410924 651.9   522.7   4397    ...             
5410925 651.1   523.4   4398    ...             
5410926 650.9   524.3   4399    ...             
5410927 650.7   524.2   4397    ...             
5410928 650.8   524.1   4395    ...             
5410929 650.8   524 4394    ...             
5410930 650.7   525.3   4386    ...             
5410931 651.2   526.4   4379    ...             
5410932 651.9   527.3   4372    ...             
5410933 652.7   526.5   4374    ...             
5410934 652.8   525.6   4375    ...             
5410935 653 524.8   4376    ...             
5410936 653.2   524.6   4376    ...             
5410937 653.5   524.6   4373    ...             
5410938 653.5   524.7   4372    ...             
5410939 652.9   524.7   4371    ...             
5410940 652.1   525.7   4372    ...             
5410941 651.2   526.6   4372    ...             
5410942 651.1   527.5   4372    ...             
5410943 651.2   527.9   4372    ...             
5410944 651.1   528.7   4373    ...             
5410945 650.9   529.4   4374    ...             
5410946 651 528.7   4374    ...             
5410947 651.2   527.7   4374    ...             
5410948 651.5   525.7   4374    ...             
5410949 651.4   524.8   4374    ...             
5410950 651.3   525.2   4375    ...             
5410951 651 526.4   4376    ...             
5410952 650.7   527.4   4382    ...             
5410953 650.5   527.2   4389    ...             
5410954 650.6   527 4396    ...             
5410955 650.6   527.1   4394    ...
如果有帮助,分隔符\t将在csv文件中

可以看出,数据是按从上到下的顺序逐行写入的,而不是按我想要的方式组织成列

我以前已经从短改到长,但不知道从哪里开始


感谢您抽出时间阅读。

这里有一个可能的策略。首先,将数据作为行的字符向量读入。我假设您的输入数据是这样的

MSG 12892743 start_trial 1 SCNB
12892743      757.0   361.7  5916.0 ... SCNB
MSG 12892744 PreBeep1_1st_Sketchpad SCNB
12892744      756.7   361.7  5920.0 ... SCNB
12892745      756.1   362.2  5924.0 ... SCNB
MSG 12892746 order of frames:   SCNB
12892746      755.8   362.3  5928.0 ... SCNB
12892747      756.7   362.3  5927.0 ... SCNB
MSG 12892748 crosshair  SCNB
12892748      757.8   361.8  5928.0 ... SCNB
12892749      758.4   361.8  5930.0 ... SCNB
MSG 12892750 sketchpad  SCNB
12892750      758.1   361.7  5934.0 ... SCNB
12892751      758.3   361.7  5938.0 ... SCNB
MSG 12892752 sketchpad  SCNB
12892752      759.1   361.9  5948.0 ... SCNB
12892753      760.4   362.7  5956.0 ... SCNB
MSG 12892754 sketchpad  SCNB
我们读到了这些

xx <- readLines("filename.txt") 

显然这有点混乱,但您的数据格式有点混乱。也许您至少可以将此作为起点。

您还可以显示原始数据吗?或者结果data.frame的
str()
?您是用
省去了值,还是文件中的文字值?我也不确定我是否理解您对上述相同内容的预期输出的描述,您能更明确地说明多行是如何压缩的吗?您好,Flick。我添加了原始数据的示例。这个是原始数据中的值,但我不需要它们。我的目标是通过csv中的“MSG 5410895 start_trial”将数据压缩成行,其中我添加了一个试用类型“SCNB”作为标识符,并为x&y CoOr设置了两个单独的列(时间戳后为651.6和524.6个值),我还希望为时间戳设置一列。此外,我想有一个列,将重复标签,如“PreBeep1_1st_Sketchpad”和“crosshair”,直到遇到下一个标签。如果有人能给我指出最好的方向那就太好了。谢谢各位,太好了,谢谢。我会玩一玩,让你知道它是怎么回事。我目前正在玩你的代码,但一旦我玩到了行,你会先创建
列表吗?
data
变量看起来像一个列表列表?我确实运行了行代码yup,它创建了所有带有chr(0)的列。为了清楚起见,我假设我们正在处理csv文件(因为它附加了数据),而不是源asc.Oh。我使用原始数据是因为CSV数据的结构根本不清楚。我不知道这是不是data.frame,它有多少列,逗号在哪里。
data <- lapply(strsplit(xx, "\\s+"), function(x) {
    if(x[1]=="MSG") {
        return(list(id=x[length(x)], 
            frame=paste(x[-c(1:2, length(x))], collapse=" ")))
    } else {
        return(list(x=x[2], y=x[3], t=x[4]))
    }
})
row<-setNames(replicate(5, character()), c("id","frame","x","y","t"))
rows<-Filter(function(x) !is.null(x$out) && x$out==1, Reduce(function(a,b) {
    z<-modifyList(a,b); 
    if("x" %in% names(b)) {
        z$out=1
    } else {
        z$out=0
    }
    z
}, data, row, accumulate=T))
do.call(rbind, rows)