R 以特定的方式转换数据帧

R 以特定的方式转换数据帧,r,dataframe,R,Dataframe,我有一个数据帧: ID Name Value 1 A 5% 2 B 7% 3 C mean - 14.1, variance - 1.16 4 D mean - 7.15, variance - 1.62 5 E mean - 8.32, variance - 2.56 我想转换该数据帧,所以它看起来像这样: ID Name Type Value 1 A value 5 2 B value 7 3

我有一个数据帧:

ID Name Value
1  A    5%
2  B    7%
3  C    mean - 14.1, variance - 1.16
4  D    mean - 7.15, variance - 1.62
5  E    mean - 8.32, variance - 2.56
我想转换该数据帧,所以它看起来像这样:

ID Name Type        Value
1  A    value        5
2  B    value        7
3  C    mean        14.1
3  C    variance    1.16
4  D    mean        7.15
4  D    variance    1.62
5  E    mean        8.32
5  E    variance    2.56
如您所见,我添加了一个列类型,其类型为行的值。当它的值为百分比时,它具有类型值;当它具有值均值和方差时,它必须用类型均值和类型方差分为两行。我怎么能这么做

数据采用
dput
格式。

df1 <-
structure(list(ID = 1:5, Name = c("A", "B", "C", "D", "E"), 
Value = c("5%", "7%", "mean - 14.1, variance - 1.16", 
"mean - 7.15, variance - 1.62", "mean - 8.32, variance - 2.56")), 
class = "data.frame", row.names = c(NA, -5L))

df1我们可以使用逗号(
)将数据分隔成单独的行,
列分隔成
“-”
上的两列,并以数字形式获取数据

library(dplyr)
library(tidyr)

df1 %>%
  separate_rows(Value, sep = ',') %>%
  separate(Value, c('Type', 'Value'), sep = '\\s+-\\s+', fill = "left") %>%
  mutate(Type = replace(Type, is.na(Type), 'value'), 
         Value = readr::parse_number(Value)))

#  ID Name      Type Value
#1  1    A     value  5.00
#2  2    B     value  7.00
#3  3    C      mean 14.10
#4  3    C  variance  1.16
#5  4    D      mean  7.15
#6  4    D  variance  1.62
#7  5    E      mean  8.32
#8  5    E  variance  2.56
我们也可以使用

library(dplyr)
library(tidyr)
library(stringr)
df1 %>%
  separate_rows(Value, sep = ',') %>%
  separate(Value, c('Type', 'Value'), sep = '\\s+-\\s+', fill = "left") %>%
  mutate(Type = replace(Type, is.na(Type), 'value'), 
         Value = as.numeric(str_remove_all(Value, "\\D+"))))

谢谢,但它并没有按照预期从新数据帧中删除百分号dataframe@french_fries您是否运行了
parse_number
步骤?它应该删除
%
符号。