将绝对频率数据转换为原始数据
Convert absolute frequency data to raw data
我有来自 4 个电子分销商的绝对频率数据,表示他们为特定功率提供了多少电源 -class(以瓦特为单位)。我想将此数据转换为原始数据,以便为 4 个分销商创建箱线图和进行一些其他分析。
我已经尝试过 reshape2-lib 的 R 函数 melt()
,但它将绝对频率视为测量值。
我的数据(绝对频率)是这样的:
power_in_watt digikey farnell mouser rs
1 0 0 0 2
2 0 0 0 1
4 1 0 1 3
5 2 0 0 3
6 2 1 2 3
...
我想要的原始数据:
distributor power_in_watt
rs 1
rs 1
rs 2
digikey 4
mouser 4
rs 4
rs 4
rs 4
digikey 5
digikey 5
rs 5
rs 5
rs 5
digikey 6
digikey 6
farnell 6
mouser 6
mouser 6
rs 6
rs 6
rs 6
rs 6
...
有没有办法自动转换它(最好是在 R 中)?
我知道你想要的是根据给定的频率复制行。
首先,我们使用 tidyr
的长格式数据,reshape2
的后继库。
> library(tidyr)
> df.long <- df %>% gather(distributor, count, -power_in_watt)
> df.long
power_in_watt distributor count
1 1 digikey 0
2 2 digikey 0
3 4 digikey 1
4 5 digikey 2
5 6 digikey 2
6 1 farnell 0
7 2 farnell 0
8 4 farnell 0
9 5 farnell 0
10 6 farnell 1
11 1 mouser 0
然后我们可以使用基数 R
根据计数扩展行
> df.long[rep(1:nrow(df.long)), df.long$count), ]
power_in_watt distributor count
3 4 digikey 1
4 5 digikey 2
4.1 5 digikey 2
5 6 digikey 2
5.1 6 digikey 2
10 6 farnell 1
13 4 mouser 1
15 6 mouser 2
15.1 6 mouser 2
16 1 rs 2
16.1 1 rs 2
17 2 rs 1
编辑:仔细阅读让我完善我的答案
你可以试试单衬底 R
:
stack(lapply(df[-1], rep, x=df[,1]))
# values ind
#1 4 digikey
#2 5 digikey
#3 5 digikey
#4 6 digikey
#5 6 digikey
#6 6 farnell
#7 4 mouser
#8 6 mouser
#9 6 mouser
#10 1 rs
#11 1 rs
#12 2 rs
#13 4 rs
#14 4 rs
#15 4 rs
#16 5 rs
#17 5 rs
#18 5 rs
#19 6 rs
#20 6 rs
#21 6 rs
数据:
df = structure(list(power_in_watt = c(1L, 2L, 4L, 5L, 6L), digikey = c(0L,
0L, 1L, 2L, 2L), farnell = c(0L, 0L, 0L, 0L, 1L), mouser = c(0L,
0L, 1L, 0L, 2L), rs = c(2L, 1L, 3L, 3L, 3L)), .Names = c("power_in_watt",
"digikey", "farnell", "mouser", "rs"), class = "data.frame", row.names = c(NA,
-5L))
我有来自 4 个电子分销商的绝对频率数据,表示他们为特定功率提供了多少电源 -class(以瓦特为单位)。我想将此数据转换为原始数据,以便为 4 个分销商创建箱线图和进行一些其他分析。
我已经尝试过 reshape2-lib 的 R 函数 melt()
,但它将绝对频率视为测量值。
我的数据(绝对频率)是这样的:
power_in_watt digikey farnell mouser rs
1 0 0 0 2
2 0 0 0 1
4 1 0 1 3
5 2 0 0 3
6 2 1 2 3
...
我想要的原始数据:
distributor power_in_watt
rs 1
rs 1
rs 2
digikey 4
mouser 4
rs 4
rs 4
rs 4
digikey 5
digikey 5
rs 5
rs 5
rs 5
digikey 6
digikey 6
farnell 6
mouser 6
mouser 6
rs 6
rs 6
rs 6
rs 6
...
有没有办法自动转换它(最好是在 R 中)?
我知道你想要的是根据给定的频率复制行。
首先,我们使用 tidyr
的长格式数据,reshape2
的后继库。
> library(tidyr)
> df.long <- df %>% gather(distributor, count, -power_in_watt)
> df.long
power_in_watt distributor count
1 1 digikey 0
2 2 digikey 0
3 4 digikey 1
4 5 digikey 2
5 6 digikey 2
6 1 farnell 0
7 2 farnell 0
8 4 farnell 0
9 5 farnell 0
10 6 farnell 1
11 1 mouser 0
然后我们可以使用基数 R
根据计数扩展行> df.long[rep(1:nrow(df.long)), df.long$count), ]
power_in_watt distributor count
3 4 digikey 1
4 5 digikey 2
4.1 5 digikey 2
5 6 digikey 2
5.1 6 digikey 2
10 6 farnell 1
13 4 mouser 1
15 6 mouser 2
15.1 6 mouser 2
16 1 rs 2
16.1 1 rs 2
17 2 rs 1
编辑:仔细阅读让我完善我的答案
你可以试试单衬底 R
:
stack(lapply(df[-1], rep, x=df[,1]))
# values ind
#1 4 digikey
#2 5 digikey
#3 5 digikey
#4 6 digikey
#5 6 digikey
#6 6 farnell
#7 4 mouser
#8 6 mouser
#9 6 mouser
#10 1 rs
#11 1 rs
#12 2 rs
#13 4 rs
#14 4 rs
#15 4 rs
#16 5 rs
#17 5 rs
#18 5 rs
#19 6 rs
#20 6 rs
#21 6 rs
数据:
df = structure(list(power_in_watt = c(1L, 2L, 4L, 5L, 6L), digikey = c(0L,
0L, 1L, 2L, 2L), farnell = c(0L, 0L, 0L, 0L, 1L), mouser = c(0L,
0L, 1L, 0L, 2L), rs = c(2L, 1L, 3L, 3L, 3L)), .Names = c("power_in_watt",
"digikey", "farnell", "mouser", "rs"), class = "data.frame", row.names = c(NA,
-5L))