我有一个单独的列,其中包含单独的字符串值:
strings
1 J96C75D56I96Z95W39S79H89K69Y49B99R49L49U61
2 J96C75D56I96Z95W39S79H89K69Y49B99R49L49U61
我想使用模式将其转换为数据框。例如,字符串中的前两个字符位置是第一列的名称(J9),第三个位置是第一列的值(6)。模式是2,1,2,1 ......
我想要的是类似于Excel中的text-to-columns功能。我怎么能在R?
中做到这一点预期产出:
J9 C7 5D
6 5 5 and so on..
6 5 5 and so on..
答案 0 :(得分:3)
有几种方法可以做到这一点,但这里有一种直观的方式可以帮助教授一些有用的R概念:
x <- c("J96C75D56I96Z95W39S79H89K69Y49B99R49L49U61")
colNames <- paste0(unlist(strsplit(x, ""))[c(TRUE,FALSE,FALSE)],
unlist(strsplit(x, ""))[c(FALSE,TRUE,FALSE)])
values <- paste0(unlist(strsplit(x, ""))[c(FALSE,FALSE,TRUE)])
df <- data.frame(matrix(values,nrow=1))
colnames(df) <- colNames
输出:
J9 C7 D5 I9 Z9 W3 S7 H8 K6 Y4 B9 R4 L4 U6
1 6 5 6 6 5 9 9 9 9 9 9 9 9 1
修改强>
如果您有多个这样的字符串,您必须合并到数据框中,这里有一个选项:
df <- data.frame(strings=c("J96C75D56I96Z95W39S79H89K69Y49B99R49L49U61",
"J96C75D56I96Z95W39S79H89K69Y49B99R49L49U61"),
stringsAsFactors = FALSE)
colNames <- paste0(unlist(strsplit(df[1,], ""))[c(TRUE,FALSE,FALSE)],
unlist(strsplit(df[1,], ""))[c(FALSE,TRUE,FALSE)])
x <- lapply(df$strings,
function(i) matrix(paste0(unlist(strsplit(i,""))[c(FALSE,FALSE,TRUE)]),nrow=1))
require(plyr)
df <- data.frame(rbind.fill.matrix(x))
colnames(df) <- colNames
输出:
J9 C7 D5 I9 Z9 W3 S7 H8 K6 Y4 B9 R4 L4 U6
1 6 5 6 6 5 9 9 9 9 9 9 9 9 1
2 6 5 6 6 5 9 9 9 9 9 9 9 9 1
答案 1 :(得分:0)
如果您的行长度相同(.txt文件中的常见内容),您可以尝试使用固定宽度格式:
read.fwf()
类似
read.fwf(yourfile.txt, widths=c(2,1,2,1), colnames=c(variable1,value1,variable2,value2))