我正在使用一个长字符向量,其中每行应该包含一个小数据帧。我创建了一个函数来清除数据并生成一个字符串,该字符串可以随时输入到val myMap5 = myMap1.mapValues {
valuesList => valuesList.flatMap { // here we use flatMap, to filter any None.
valueKey => myMap2.get(valueKey).map(values => valueKey -> values)
}.toMap
} filter {
case (_, values) => values.nonEmpty
}
// myMap5: Map[String, Map[String, List[Int]]] = Map(
// testKey1 -> Map(testValue1 -> List(1, 2, 3), testValue2 -> List(5)),
// testKey2 -> Map(testValue5 -> List(4, 5, 6)),
// testKey4 -> Map(testValue10 -> List(7, 8, 9))
// )
函数中。输出如下:
data.frame()
我想将此输出传递到[1] "`demo/members/education_member` = c('High_school', 'High_school'), `demo/members/status` = c('Other', 'Other'), `demo/members/name` = c('Hans Solo', 'Luke Skywalker')"
以获得以下数据帧(由于复制并粘贴了上面未引用的输出并将其传递给data.frame()
函数而产生):
data.frame
问题:将字符输出的内容转换为R数据帧的最佳方法是什么?
答案 0 :(得分:1)
这是重申我的意见的一种方法-可能会有更好的方法将原始数据转换为清理的数据框。
x <- "`demo/members/education_member` = c('High_school', 'High_school'), `demo/members/status` = c('Other', 'Other'), `demo/members/name` = c('Hans Solo', 'Luke Skywalker')"
y <- paste0("data.frame(", x, ")")
eval(parse(text = y))
demo.members.education_member demo.members.status demo.members.name
1 High_school Other Hans Solo
2 High_school Other Luke Skywalker
答案 1 :(得分:0)
如果可以将data.frame()函数添加到字符串中,则可以使用此方法。如果没有通知我,我将删除。这有点麻烦,并且使用rlang
,但是您可以通过不使用基数eval
而不是找出rlang准引用的东西来使它更好。
x <- "data.frame(
'demomemberseducationmember' = c('High_school','High_school'),
'demomembersstatus' = c('Other', 'Other'),
'demmembersname' = c('Hans Solo', 'Luke Skywalker'))"
eval(rlang::parse_expr(x))