将逗号分隔的条目转换为列 [英] Convert comma separated entry to columns
问题描述
我有一个包含多个列的数据集,其中一个列是反应时间的列。这些反应时间用逗号分隔以表示不同试验的反应时间(同一参与者的反应时间)。
I have a dataset with several columns, one of which is a column for reaction times. These reaction times are comma separated to denote the reaction times (of the same participant) for the different trials.
例如:第1行(即: )在反应时间列下有以下内容
For example: row 1 (i.e.: the data from participant 1) has the following under the column "reaction times"
reaction_times
2000,1450,1800,2200
因此,这些是试验参与者1对试验的反应时间 1,2,3,4
Hence these are the reaction times of participant 1 for trials 1,2,3,4
.
我现在想创建一个新的数据集,其中这些试验的反应时间都形成单独的列。这样,我可以计算每个试验的平均反应时间。
I now want to create a new data set in which the reaction times for these trials all form individual columns. This way I can calculate the mean reaction time for each trial.
trial 1 trial 2 trial 3 trial 4
participant 1: 2000 1450 1800 2200
我试过colsplit reshape2-package,但似乎不会将我的数据分成新的列(也许因为我的数据都在1个单元格)。
I tried the "colsplit" from the "reshape2"-package but that doesn't seem to split my data into new columns (perhaps because my data is all in 1 cell).
有任何建议吗?
推荐答案
strsplit()函数;
I think you are looking for the strsplit() function;
a = "2000,1450,1800,2200"
strsplit(a, ",")
[[1]]
[1] "2000" "1450" "1800" "2200"
请注意,strsplit返回一个列表,在这种情况下只有一个元素。这是因为strsplit以向量作为输入。因此,您还可以将单个单元格字符的长向量放入函数,并返回该向量的拆分列表。在一个更相关的例子中,这看起来像:
Notice that strsplit returns a list, in this case with only one element. This is because strsplit takes vectors as input. Therefore, you can also put a long vector of your single cell characters into the function and get back a splitted list of that vector. In a more relevant example this look like:
# Create some example data
dat = data.frame(reaction_time =
apply(matrix(round(runif(100, 1, 2000)),
25, 4), 1, paste, collapse = ","),
stringsAsFactors=FALSE)
splitdat = do.call("rbind", strsplit(dat$reaction_time, ","))
splitdat = data.frame(apply(splitdat, 2, as.numeric))
names(splitdat) = paste("trial", 1:4, sep = "")
head(splitdat)
trial1 trial2 trial3 trial4
1 597 1071 1430 997
2 614 322 1242 1140
3 1522 1679 51 1120
4 225 1988 1938 1068
5 621 623 1174 55
6 1918 1828 136 1816
,最后计算每人的平均值:
and finally, to calculate the mean per person:
apply(splitdat, 1, mean)
[1] 1187.50 361.25 963.75 1017.00 916.25 1409.50 730.00 1310.75 1133.75
[10] 851.25 914.75 881.25 889.00 1014.75 676.75 850.50 805.00 1460.00
[19] 901.00 1443.50 507.25 691.50 1090.00 833.25 669.25
这篇关于将逗号分隔的条目转换为列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!