我有一个包含一些缺失数据的数据集(data1.csv)(随机丢失),我正在从这个数据集(d1)创建一个子集,这样只有完整的观察结果才会保留在d2中。我使用 ftable , as.data.frame 函数并创建一个代表每个组合百分比的 p 列。
d1 = read.csv("C:/Users/....../Data1.csv",header=T)
y x1 x2 x3
1 1 2 1 NA
2 0 2 NA 0
3 1 NA 1 1
4 0 3 1 0
5 0 2 0 NA
6 0 1 0 1
7 1 NA NA 1
8 1 3 0 1
9 1 2 0 0
10 0 3 0 NA
11 1 NA 0 1
12 1 3 NA 1
13 0 3 1 NA
14 0 NA 1 0
15 1 1 0 NA
16 0 1 NA 1
17 1 NA 0 NA
18 0 3 1 1
19 0 1 NA 0
20 0 NA 0 1
d2= d1[complete.cases(d1),]
d2
y x1 x2 x3
4 0 3 1 0
6 0 1 0 1
8 1 3 0 1
9 1 2 0 0
18 0 3 1 1
d3= ftable(d2)
d4=as.data.frame(d3)
d4
y x1 x2 x3 Freq p
1 0 1 0 0 0 0.0
2 1 1 0 0 0 0.0
3 0 2 0 0 0 0.0
4 1 2 0 0 1 0.2
5 0 3 0 0 0 0.0
6 1 3 0 0 0 0.0
7 0 1 1 0 0 0.0
8 1 1 1 0 0 0.0
9 0 2 1 0 0 0.0
10 1 2 1 0 0 0.0
11 0 3 1 0 1 0.2
12 1 3 1 0 0 0.0
13 0 1 0 1 1 0.2
14 1 1 0 1 0 0.0
15 0 2 0 1 0 0.0
16 1 2 0 1 0 0.0
17 0 3 0 1 0 0.0
18 1 3 0 1 1 0.2
19 0 1 1 1 0 0.0
20 1 1 1 1 0 0.0
21 0 2 1 1 0 0.0
22 1 2 1 1 0 0.0
23 0 3 1 1 1 0.2
24 1 3 1 1 0 0.0
函数 ftable , as.data.frame 工作正常,但问题是我仍然在结果(d4)中看到所有这些观察结果有意义。当我做完完成时,我以为我摆脱了这个。(d1)
因此,需要帮助摆脱缺失值并仅为这些完整的观察结果进行频率表
y x1 x2 x3
4 0 3 1 0
6 0 1 0 1
8 1 3 0 1
9 1 2 0 0
18 0 3 1 1
答案 0 :(得分:2)
查找?complete.cases()。它会做你想要的;您可以指定缺失值以及要为其执行的列。
答案 1 :(得分:0)
这是您对输入数据进行采样
d1<-structure(list(y = c(1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L,
1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L), x1 = c(2L, 2L, NA, 3L,
2L, 1L, NA, 3L, 2L, 3L, NA, 3L, 3L, NA, 1L, 1L, NA, 3L, 1L, NA
), x2 = c(1L, NA, 1L, 1L, 0L, 0L, NA, 0L, 0L, 0L, 0L, NA, 1L,
1L, 0L, NA, 0L, 1L, NA, 0L), x3 = c(NA, 0L, 1L, 0L, NA, 1L, 1L,
1L, 0L, NA, 1L, 1L, NA, 0L, NA, 1L, NA, 1L, 0L, 1L)), .Names = c("y",
"x1", "x2", "x3"), class = "data.frame", row.names = c("1", "2",
"3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14",
"15", "16", "17", "18", "19", "20"))
这些命令
d2 <- d1[complete.cases(d1),]
d3 <- ftable(d2)
d4 <- as.data.frame(d3)
d4
返回下表。
y x1 x2 x3 Freq
1 0 1 0 0 0
2 1 1 0 0 0
3 0 2 0 0 0
4 1 2 0 0 1
5 0 3 0 0 0
6 1 3 0 0 0
7 0 1 1 0 0
8 1 1 1 0 0
9 0 2 1 0 0
10 1 2 1 0 0
11 0 3 1 0 1
12 1 3 1 0 0
13 0 1 0 1 1
14 1 1 0 1 0
15 0 2 0 1 0
16 1 2 0 1 0
17 0 3 0 1 0
18 1 3 0 1 1
19 0 1 1 1 0
20 1 1 1 1 0
21 0 2 1 1 0
22 1 2 1 1 0
23 0 3 1 1 1
24 1 3 1 1 0
并不完全是原始行。这些是您完整案例中y
,x1
,x2
和x3
的所有可能组合。如果你只想要那些实际有观察的人,你可以做
subset(d4, Freq>0)
但这基本上会让你回到d2
4 1 2 0 0 1
11 0 3 1 0 1
13 0 1 0 1 1
18 1 3 0 1 1
23 0 3 1 1 1
似乎不清楚您的预期ftable
要做什么,或者您希望结果与d2
或p
列的来源不同。代码完全像我期望的那样工作,所以我不确定你认为结果是什么。