假设我有这样的数据
content_type:source
Id Name Price sales Profit Month Category Mode Supplier
1 A 2 5 8 1 X K John
1 A 2 6 9 2 X K John
1 A 2 5 8 3 X K John
2 B 2 4 6 1 X L Sam
2 B 2 3 4 2 X L Sam
2 B 2 5 7 3 X L Sam
3 C 2 5 11 1 X M John
3 C 2 5 11 2 X L John
3 C 2 5 11 3 X K John
4 D 2 8 10 1 Y M John
4 D 2 8 10 2 Y K John
4 D 2 5 7 3 Y K John
5 E 2 5 9 1 Y M Sam
5 E 2 5 9 2 Y L Sam
5 E 2 5 9 3 Y M Sam
6 F 2 4 7 1 Z M Kyle
6 F 2 5 8 2 Z L Kyle
6 F 2 5 8 3 Z M Kyle
和subset
我发现哪个table
有多少Category
个唯一产品。
Mode
现在我要在 K L M
X 2 2 1
Y 1 1 2
Z 0 1 1
的{{1}}表格中添加一个新条目,以便它看起来像
Mode
所以str(df)将是
total
因此,在我添加一个新的因子模式变量后,它将变为
K L M Total
X 2 2 1 5
Y 1 1 2 4
Z 0 1 1 2
因此,模式的因子水平从3变为4,观察数量从9变为12。
我可以通过获取data.frame': 9 obs. of 3 variables:
$ Category : Factor w/ 3 levels "X","Y"..:
$ Mode: Factor w/ 3 levels "K","L","M"..: 1 1 1 1 1 1 ...
$ Freq : int 2,2,1 ...
和data.frame': 12 obs. of 3 variables:
$ Category : Factor w/ 3 levels "X","Y"..:
$ Mode: Factor w/ 4 levels "K","L","M", "Total"..: 1 1 11 1 ...
$ Freq : int 2,2,1,5 ...
来添加新的总列,但它不会满足我的目的。我希望rowSums
使用行总和的值获得cbind
的新因子级别。
我希望我解释得很清楚。
答案 0 :(得分:4)
我还不确定你想要什么(!),但这可能会越来越近了?
我认为最简单的方法是使用rbind.fill()
character
函数,它会自动统一因子级别。您也可以手动执行此操作,方法是将因子变量转换回dat2 <- structure(list(Category = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L), .Label = c("X",
"Y", "Z"), class = "factor"), Mode = structure(c(1L, 1L, 1L,
2L, 2L, 2L, 3L, 2L, 1L, 3L, 1L, 1L, 3L, 2L, 3L, 3L, 2L, 3L), .Label = c("K",
"L", "M"), class = "factor")), .Names = c("Category", "Mode"), row.names = c(NA,
18L), class = "data.frame")
变量,然后再将各个部分组合在一起。
数据:
tab <- with(dat,addmargins(table(Category,Mode),2))
获取行总数:
dat3 <- data.frame(Category=rownames(tab),Mode=paste("Total:",tab[,"Sum"]))
将行总计转换为数据框:
plyr::rbind.fill(dat2,dat3)
级联:
public class TestPublic{
internal class TestInternal{
private class TestPrivate{
private var x = 123
}
func foo()
{
print(TestPrivate().x)
}
}
}
let x = TestPublic()
let y = TestPublic.TestInternal()
let z = TestPublic.TestInternal.TestPrivate() // This trigger an access error!!!
y.foo() // After removing last line.Everything compiles well and output '123'
答案 1 :(得分:0)
这是另一种可能的做法。我只是想指出,这样做将扩展Category和Mode列中的行数,因此您必须弄清楚如何扩展数据框中的其他列。让我们首先重新创建类似于Category和Mode列的内容,然后添加'Total'因子级别:
> Mode <- factor(sample(c('K', 'L', 'M'), 18, replace=T))
> Category <- factor(c(rep('X', 9), rep('Y', 6), rep('Z', 3)))
> data.frame(Category=Category, Mode=Mode)
Category Mode
1 X M
2 X K
3 X K
4 X M
5 X K
6 X K
7 X K
8 X M
9 X L
10 Y M
11 Y L
12 Y M
13 Y M
14 Y M
15 Y M
16 Z K
17 Z K
18 Z L
> table(Category, Mode)
Mode
Category K L M
X 5 1 3
Y 0 1 5
Z 2 1 0
> Total <- rowSums(table(Category, Mode))
> Category <- factor(c(as.character(Category), rep('X', Total[1]), rep('Y', Total[2]), rep('Z', Total[3])))
> Mode <- factor(c(as.character(Mode), rep('Total', sum(Total))))
> data.frame(Category=Category, Mode=Mode)
Category Mode
1 X M
2 X K
3 X K
4 X M
5 X K
6 X K
7 X K
8 X M
9 X L
10 Y M
11 Y L
12 Y M
13 Y M
14 Y M
15 Y M
16 Z K
17 Z K
18 Z L
19 X Total
20 X Total
21 X Total
22 X Total
23 X Total
24 X Total
25 X Total
26 X Total
27 X Total
28 Y Total
29 Y Total
30 Y Total
31 Y Total
32 Y Total
33 Y Total
34 Z Total
35 Z Total
36 Z Total
> table(Category, Mode)
Mode
Category K L M Total
X 5 1 3 9
Y 0 1 5 6
Z 2 1 0 3