为清晰起见编辑:我有一个名为“dat”的数据框,包含3列“Trial.Type”,“Affect”和“Reaction.Time”
前三行:Trial.Type影响Reaction.Time
Aa,1 0 1231
Aa,2 1 1241
哈,1 1 1112我想知道是否有办法拆分列“Trial.Type”,以便“Aa”和“1”是两列; Trial.Type和Intensity分别。导致具有4列的数据框。
非常感谢任何帮助。我很难找到这个问题的答案,如果这是一个重复,我道歉!
答案 0 :(得分:3)
您可以在"栏中使用read.csv
"。
> dat <- c("Aa, 1", "Aa, 2", "Ha, 1", "Hpa, 8")
> read.csv(text = dat, header=FALSE, col.names = c("Trial.Type", "Intensity"))
Trial.Type Intensity
1 Aa 1
2 Aa 2
3 Ha 1
4 Hpa 8
替换&#34; dat&#34;使用您的列名称(例如,mydf$Trial.Type
或可能as.character(mydf$Trial.Type)
)。
您还可以查看我的&#34; splitstackshape&#34;包,特别是concat.split
函数组。
为了OP的好处,这是一个可重复的示例和解决方案,使用我的&#34; splitstackshape&#34;包。当然,这也可以使用基本R,使用上面描述的方法(或使用此处提到的strsplit
方法之一)来完成。
首先,一些示例数据的列为character
,另一列为factor
:
mydf <- data.frame(A = factor(c("1, Z", "2, Y", "3, X", "4, W")),
B = c("11, ZZ", "22, YY", "33, XX", "44, WW"),
C = c(123, 234, 345, 456), stringsAsFactors = FALSE)
mydf
# A B C
# 1 1, Z 11, ZZ 123
# 2 2, Y 22, YY 234
# 3 3, X 33, XX 345
# 4 4, W 44, WW 456
str(mydf)
# 'data.frame': 4 obs. of 3 variables:
# $ A: Factor w/ 4 levels "1, Z","2, Y",..: 1 2 3 4
# $ B: chr "11, ZZ" "22, YY" "33, XX" "44, WW"
# $ C: num 123 234 345 456
其次,加载包并探索选项:
library(splitstackshape)
## Split a factor column
concat.split(mydf, split.col = "A", sep = ",")
# A B C A_1 A_2
# 1 1, Z 11, ZZ 123 1 Z
# 2 2, Y 22, YY 234 2 Y
# 3 3, X 33, XX 345 3 X
# 4 4, W 44, WW 456 4 W
## Split a character column
concat.split(mydf, split.col = "B", sep = ",")
# A B C B_1 B_2
# 1 1, Z 11, ZZ 123 11 ZZ
# 2 2, Y 22, YY 234 22 YY
# 3 3, X 33, XX 345 33 XX
# 4 4, W 44, WW 456 44 WW
## Split two columns in one go
concat.split.multiple(mydf, split.cols = c("A", "B"), seps = ",")
# C A_1 A_2 B_1 B_2
# 1 123 1 Z 11 ZZ
# 2 234 2 Y 22 YY
# 3 345 3 X 33 XX
# 4 456 4 W 44 WW
答案 1 :(得分:2)
您可以使用strsplit
:
dat = c("Aa, 1", "Aa, 2", "Ha, 1", "Hpa, 8")
spl = strsplit(dat, ", ")
data.frame(Trial.Type = unlist(lapply(spl, "[", 1)),
Intensity = as.numeric(unlist(lapply(spl, "[", 2))))
# Trial.Type Intensity
# 1 Aa 1
# 2 Aa 2
# 3 Ha 1
# 4 Hpa 8
答案 2 :(得分:1)
您可以使用以下说明:
datNames <- names(dat)
dat <- cbind(t(matrix(unlist(strsplit(dat$Trial.type, ", ")),ncol=dim(dat)[1])))
names(dat) <- c(datNames,"Trial.type2","Intensity")