df <- data.frame(V_1 = c("null", "name:c", "name:d", "name:a", "name:k","name:A"),
V_2 = c("null", "cat:Y", "cat:Z", "cat:K", "cat:L","cat:K"))
我有一个包含多个列的 Dataframe ,这些列具有如上所述的键-值对。
我希望分隔单元格的值,这样“key”就成为新列的列名,“value”就成为单元格的值。
预期产出:
df2 <- data.frame(name = c("null", "c", "d", "a", "k","A"),
cat = c("null", "Y", "Z", "K", "L","K"))
df2
注意,对于我的真实的 Dataframe ,我有几百个列,所以我正在寻找一种解决方案,它不需要手动键入列名称,而是基于键:值对的前半部分自动生成名称。
目前,我使用以下方法拆分键-值对:
df3 <- df %>%
separate_wider_delim(cols = everything(),
delim = ",",
too_few = "align_start",
names_sep = "")
但是我不知道如何正确地转换它,使分隔值的前半部分成为列名。
4条答案
按热度按时间vqlkdk9b1#
在Base R中,您可以在粘贴所有内容后使用
read.dcf
:编辑
yeotifhr2#
您可以使用第一行来获取列名,删除冒号之后的所有内容。
要清除列值,请删除冒号之前的所有内容。
第二步也可以使用
dplyr
-tp5buhyn3#
您不必总是尝试将所有内容压缩到一个步骤中,使用更传统的工具,两个不同的步骤也可以很好地工作:
fnx2tebb4#
下面是一个tidyverse解决方案:第二部分也由@Ronak Shah提供: