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
步骤?它应该删除%
符号。