我有这样的数据框:
v2 v3
1.000 2:3,3:2,5:2,
2.012 1:5,2:4,6:3,
第二列v3由'index-value'对组成,每对由 ,
分隔 .
在每个'index-value'对中, :
之前的数字是向量索引 . :
之后的数字是相应的值 . 例如 . 在第一行中,矢量索引是2,3和5,并且相应的值是3,2和2 .
未在字符串中表示的索引在结果向量中应具有值0 .
我希望将'index-value'向量转换为值向量 .
因此,对于超出预期结果的两个字符串是:
v2 v3
1.000 c(0,3,2,0,2,0)
2.012 c(5,4,0,0,0,3)
3 回答
我们使用
data.table
包只是为了使用它的tstrsplit
函数 . 它删除了一个中间步骤 . 试试这个:我们首先使用逗号(
,
)拆分v3
的每个元素然后我们再次使用
:
作为分隔符进行拆分;我们创建一个长度为6的数字向量;
我们最终根据描述的逻辑填充值 .
我建议采用类似于@nicola建议的方法,但是,为了好玩,这里有一个替代方案 .
使用
read.dcf
,用于读取"tag:value"类型数据 . 要获取所有"tags",请使用fields
参数 . 您在对@nicola的评论中将此指定为1:6 . 此外,您需要用换行符("\n"
)替换"," .我们将所有这些存储在一个字符串中,以便
deparse
textConnection
will be able to handle it . 这个例子没有必要,但以防万一....要将
data.frame
作为list
numeric
向量返回,请执行以下操作:这是结果
str
:这是另一种仅使用
base
函数的方法 .首先,字符串被
:
或,
拆分(strsplit
) . 奇数位置处的元素对应于索引,甚至位置对应于值 . 我们预先分配了max
max
索引的numeric
向量 .在
lapply
循环中,我们将分裂矢量(即偶数元素;x[c(FALSE, TRUE)]
)的值分配给索引处的预分配矢量vec
(即分裂矢量的奇数元素;x[c(TRUE, FALSE)]
) .