R的新手,正努力知道要问些什么,在这里也发现了类似的问题 How to split a character vector into data frame? 但这长度是固定的,我一直无法适应我的问题
我在R的数组中有一些数据
TEST <- c("Value01:100|Value02:200|Value03:300|","Value04:1|Value05:2|",
"StillAValueButNamesAreNotConsistent:12345.6789|",
"AlsoNotAllLinesAreTheSameLength:1|")
数据成对存储,我希望将其拆分成一个数据框:
Variable Value
Value01 100
Value02 200
Value03 300
Value04 1
Value05 2
StillAValueButNamesAreNotConsistent 12345.6789
AlsoNotAllLinesAreTheSameLength 1
变量名称是一个字符串,并且值始终是数字
任何帮助都会很棒!
谢谢
答案 0 :(得分:5)
一个人可以使用基于?- append([[1,2],[3]],X). % append/2 - Concatenate a list of lists.
X = [1, 2, 3].
?- append([4],[5],X). % append/3 - X is the concatenation of List1 and List2
X = [4, 5].
的解决方案。将向量tidyr
转换为data.frame并从每一行中删除最后一个TEST
,因为它没有任何意义。
现在,使用|
基于tidyr::separate_rows
扩展行,然后使用|
函数将数据分为2列。
tidyr::separate
答案 1 :(得分:5)
我们可以在基数R中用一行完成它。只需将|
字符更改为换行符,然后将:
用作sep
中的read.table()
值。您也可以在此处设置列名称。
read.table(text = gsub("\\|", "\n", TEST), sep = ":",
col.names = c("Variable", "Value"))
# Variable Value
# 1 Value01 100.00
# 2 Value02 200.00
# 3 Value03 300.00
# 4 Value04 1.00
# 5 Value05 2.00
# 6 StillAValueButNamesAreNotConsistent 12345.68
# 7 AlsoNotAllLinesAreTheSameLength 1.00
答案 2 :(得分:0)
使用基本R:
(我已经分解了每个步骤,希望可以使代码清晰明了)
Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
答案 3 :(得分:0)
lst <- strsplit(unlist(strsplit(TEST,'\\|')),':')
lst_df <- data.frame(matrix(unlist(l), nrow=length(l), byrow=T))
colnames(lst_df) <- c("Variable", "Value")
Variable Value
1 Value01 100
2 Value02 200
3 Value03 300
4 Value04 1
5 Value05 2
6 StillAValueButNamesAreNotConsistent 12345.6789
7 AlsoNotAllLinesAreTheSameLength 1
答案 4 :(得分:0)
借助strsplit
和unlist
函数。每个命令在下面显示,并带有输出。
输入
TEST
# [1] "Value01:100|Value02:200|Value03:300|"
# [2] "Value04:1|Value05:2|"
# [3] "StillAValueButNamesAreNotConsistent:12345.6789|"
# [4] "AlsoNotAllLinesAreTheSameLength:1|"
先按|
再按:
my_list <- strsplit(unlist(strsplit(TEST, "|", fixed = TRUE)), ":", fixed = TRUE)
my_list
# [[1]]
# [1] "Value01" "100"
# [[2]]
# [1] "Value02" "200"
# [[3]]
# [1] "Value03" "300"
# [[4]]
# [1] "Value04" "1"
# [[5]]
# [1] "Value05" "2"
# [[6]]
# [1] "StillAValueButNamesAreNotConsistent" "12345.6789"
# [[7]]
# [1] "AlsoNotAllLinesAreTheSameLength" "1"
将以上列表转换为data.frame
df <- data.frame(matrix(unlist(my_list), ncol = 2, byrow=TRUE))
df
# X1 X2
# 1 Value01 100
# 2 Value02 200
# 3 Value03 300
# 4 Value04 1
# 5 Value05 2
# 6 StillAValueButNamesAreNotConsistent 12345.6789
# 7 AlsoNotAllLinesAreTheSameLength 1
数据框的名称
names(df) <- c("Variable", "Value")
df
# Variable Value
# 1 Value01 100
# 2 Value02 200
# 3 Value03 300
# 4 Value04 1
# 5 Value05 2
# 6 StillAValueButNamesAreNotConsistent 12345.6789
# 7 AlsoNotAllLinesAreTheSameLength 1