我有一个长向量要放入R的数据框中。这是一个示例
vector<-c("1","John Doe","15%","2","Janet Doe","13%","3","Jack William Doe","10%")
Run Code Online (Sandbox Code Playgroud)
我想要一个看起来像这样的输出
Position Names Percentage
1 1 John Doe 15%
2 2 Janet Doe 13%
3 3 Jack William Doe 10%
Run Code Online (Sandbox Code Playgroud)
我知道解决方案将涉及data.frame(),可能还涉及strsplit(),但稍后将拆分长度可变的名称。
一个选项是转换为matrix,方法是指定列数(ncol),转换为data.frame,然后使用type.convert
out <- as.data.frame(matrix(vector, ncol = 3, byrow = TRUE,
dimnames = list(NULL, c("Position", "Names", "Percentage"))),
stringsAsFactors = FALSE)
out[] <- lapply(out, type.convert, as.is = TRUE)
out
# Position Names Percentage
#1 1 John Doe 15%
#2 2 Janet Doe 13%
#3 3 Jack William Doe 10%
Run Code Online (Sandbox Code Playgroud)
正如@nicola在评论中提到的那样,type.convert还为data.frame最新R版本引入了方法(已检入R 3.6.0)。因此,最后一行可以更改为
out <- type.convert(out, as.is = TRUE)
Run Code Online (Sandbox Code Playgroud)
或者另一个选择是read.csv/read.table在将“ vector”折叠为单个字符串后使用
read.csv(text= gsub("(([^,]+,){2}[^,]+),", "\\1\n",toString(vector)),
header = FALSE, stringsAsFactors = FALSE, col.names = c("Position",
"Names", "Percentage"), strip.white = TRUE)
# Position Names Percentage
#1 1 John Doe 15%
#2 2 Janet Doe 13%
#3 3 Jack William Doe 10%
Run Code Online (Sandbox Code Playgroud)
这将确保类型根据值进行相应的转换,而不是以后进行转换
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |