通过在旧条目中拆分逗号分隔的条目来创建新的data.frame

时间:2018-10-08 12:49:43

标签: r string dataframe vector

我想用两个新列创建一个新的数据框。 数据框将包含“扩展的” v3,该“扩展的” v2是通过分解左侧v1中用逗号分隔的值并创建两个新列组成的,其中一列仅包含v1中对应的值在同一列中,其次是df中的值除以> df[1,] v1 v2 1 1 1,3 中相应行中包含并用逗号分隔的值的数量。 换句话说,如果像在这个例子中一样

  v1 v2_split  v3
1  1  1       0.5
2  1  3       0.5

然后新的df将在前两行中包含以下新条目:

v1 <- c(1,5,3,7,9,3,2,5,NA,7)
v2 <- c("1,3","2","0.05,4,6,7","0",NA,"6","7","10,11","9","0.1")
df <- data.frame(v1,v2)
df$v2 <- as.character(df$v2)
v2_split <- as.numeric(unlist(strsplit(df$v2,",")))

以下是可重现的示例:

.map

1 个答案:

答案 0 :(得分:1)

不确定我是否完全正确地回答了问题,但似乎您需要以下条件:

v2_split <- strsplit(df$v2,",")

df <- data.frame(v1 = rep(v1, lengths(v2_split)),
                 v2 = as.numeric(unlist(v2_split)),
                 v3 = rep(v1/lengths(v2_split), lengths(v2_split))
                 )

结果:

> df

   v1    v2   v3
1   1  1.00 0.50
2   1  3.00 0.50
3   5  2.00 5.00
4   3  0.05 0.75
5   3  4.00 0.75
6   3  6.00 0.75
7   3  7.00 0.75
8   7  0.00 7.00
9   9    NA 9.00
10  3  6.00 3.00
11  2  7.00 2.00
12  5 10.00 2.50
13  5 11.00 2.50
14 NA  9.00   NA
15  7  0.10 7.00