【发布时间】:2017-05-31 18:27:30
【问题描述】:
我有一个这样的数据框:
Category <-c("Agriculture","Education","Education","Energy","Environment","Finance","Governance","Governance","Economics","Economics","Equality","Society" , "Protection","Trade","Trade","Trade", "Transport","Transport","Water")
Value <- c(0.00e+00, 8.75e+08, 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00, 8.30e+08, 0.00e+00, 5.00e+08, 0.00e+00, 0.00e+00, 3.50e+08, 0.00e+00, 2.20e+08, 3.00e+08, 0.00e+00, 5.06e+08,0.00e+00, 3.50e+08)
Prod_A <- c(NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 2, NA, NA, NA, NA)
Prod_B <- c(NA, 3, NA, NA, NA, NA, 2, NA, NA, NA, NA, 1, NA, 3, NA, NA, 2, NA, 1)
df <- data.frame(Category, Value, Prod_A, Prod_B)
df
Category Value Prod_A Prod_B
1 Agriculture 0.00e+00 NA NA
2 Education 8.75e+08 NA 3
3 Education 0.00e+00 NA NA
4 Energy 0.00e+00 NA NA
5 Environment 0.00e+00 NA NA
6 Finance 0.00e+00 NA NA
7 Governance 8.30e+08 NA 2
8 Governance 0.00e+00 NA NA
9 Economics 5.00e+08 1 NA
10 Economics 0.00e+00 NA NA
11 Equality 0.00e+00 NA NA
12 Society 3.50e+08 NA 1
13 Protection 0.00e+00 NA NA
14 Trade 2.20e+08 NA 3
15 Trade 3.00e+08 2 NA
16 Trade 0.00e+00 NA NA
17 Transport 5.06e+08 NA 2
18 Transport 0.00e+00 NA NA
19 Water 3.50e+08 NA 1
“值”列是产品 A 或产品 B 的 sum_value。
'Prod_A' 和 'Prod_B' 是产品的数量。
我想做的是将产品 B 的值从列“值”中分离出来,并使其成为一个新列,这样这两个产品的 sum_value 就不会在一个列中混合在一起。我怎样才能做到这一点?
我使用的是 spread(df, Value, Prod_B) 但它显然是错误的...
任何帮助将不胜感激!谢谢!!
【问题讨论】:
-
Prod_B / Prod_A中的值是什么意思?他们是团体吗?有没有Prod_A/B都不是NA的情况?现在我们真的需要更多关于数据的信息来了解如何最好地解决问题 -
话虽如此,我想你想要的是这样的:
df$Value_B <- ifelse(!is.na(Prod_B), Value, NA) -
@MikeH。 Prod_A 中的值是产品类型 A 中产品的计数,在 Prod_B 中相同。它是一个平面表,这意味着在每一行中,列“Prod_A”和“Prod_B”不会同时具有值。如果“Prod_A”中有多个产品计数,“Value”中对应的值表示“Prod_A”的sum_value。
-
感谢您的澄清!我想我上面贴的
ifelse()应该是你想要的吧? -
@MikeH。感谢您的解决方案。但是如何从“Value”中删除“Value_B”,以便将“Value”重命名为“Value_A”。
标签: r dplyr data-cleaning