【发布时间】:2016-12-02 12:20:26
【问题描述】:
我的数据具有以以下格式存储的变量:
V2 V3
1 Price : 33,990 Size : 16, 17 & 18.5"
2 Price : 30,830 Size : 13, 16, 18 & 19.5"
3 Price : 48,560 Sizes : 21 & 21.5"
4 Price : 33,790 Size : 17.5, 18.5, 19.5 & 21.5
5 Price : 37,990 Size : 17.5, 18.5 & 19.5
6 Price : 43,690 Size : 17.5, 18.5 & 19.5"
我需要的变量是Price 和Size 等等。 R 中将这些原始数据转换为如下格式的最简洁方法是什么:
Price Size
1 33,990 16, 17 & 18.5"
2 30,830 13, 16, 18 & 19.5"
3 48,560 21 & 21.5"
4 33,790 17.5, 18.5, 19.5 & 21.5
5 37,990 17.5, 18.5 & 19.5
6 43,690 17.5, 18.5 & 19.5"
此外,第三行的变量名称拼写错误为Sizes,而不是Size。我该如何处理这个问题,因为还有其他变量有相同的错误?
编辑:
我不能使用特定于列的策略(例如使用gsub()),因为给定列中的变量不一致。具体来说,
V20
1 Grips : Bontrager SSR
2 Headset : 1-1/8" threadless
3
4 Brakeset : Tektro alloy linear-pull
5 Brakeset : HL 280 mechanical disc
6 Brakeset : Tektro M290 hydraulic disc brakes
V20 列有 3 个唯一变量,Grips、Headset、Brakeset 和一个空白。整洁的数据框应如下所示:
Grips Headset Brakeset
1 Bontrager SSR NA NA
2 NA 1-1/8" threadless NA
3 NA NA NA
4 NA NA Tektro alloy linear-pull
5 NA NA HL 280 mechanical disc
6 NA NA Tektro M290 hydraulic disc brakes
这是一种过度简化,因为我假设 Brakeset 对前 3 行没有任何价值。这可能是也可能不是,因为值可能存储在不同的列中。如果特定行对给定变量没有值,则将使用 NA。我希望问题很清楚。
【问题讨论】:
-
tidyr 包中的分离()函数
-
您可以删除“价格:”和“尺寸:”(尺寸是错字吗?),然后重命名列。您可能还想用“.”替换“,”。
gsub可以在这里成为你的主力。 -
gsub()很容易做到这一点。不需要任何包。 -
如果价格和尺寸不一致,那么
strsplit(x, split = ':')[[1]][2]会起作用。 -
@GreenNoob 甚至 gsub() 都应该在这种情况下工作。 “。*”会照顾它。就像我的回答一样
标签: r data-cleaning