我得到了data.frame (df).
表A
bb cc dd W ee Y
vaccined 12 17.2 15.3 14 5.1 9
no_vaccined 13 7.8 9.7 11 24.9 16
NA 0.3 0.6 1.3 0 0.5 0.7
表B
bb cc dd ee
no 91.5 90.8 95 87
yes 8.5 9.2 5 13
注意:在表B中,&#39;是&#39;表示以百分比表示属于某个标准的受试者的数量(例如,#34; <5岁&#34;)。 请注意,表B没有&#39; W&#39;也不是&#39; Y&#39;变量
我想将这两个表合并为一个。但是:我只想在新表(C)中添加&#34;是&#34;表B的一行并保持&#34; W&#34;和&#34; Y&#34;表A的变量。
示例:
bb cc dd W ee Y
vaccined 12 17.2 15.3 14 5.1 9
no_vaccined 13 7.8 9.7 11 24.9 16
NA 0.3 0.6 1.3 0 0.5 0.7
yes 8.5 9.2 5 25 13 25.7
有没有办法做到这一点?
任何帮助都会非常有用。
答案 0 :(得分:2)
如果表B有Yes
和rows.to.keep<-c("Yes")# you can add more.
dfC<-which(rownames(dfB) %in% rows.to.keep)
new.df <- rbind(dfA,dfC)
作为行名,您可以执行以下操作
{{1}}
答案 1 :(得分:1)
你可以试试这个:
# sum up W and Y
# and add sum(Y) and sum(W) to B in the same column-order as in table A:
B_new<- cbind(B[, 1:3], W=sum(A$W),ee= B[, 4], Y=sum(A$Y))
rbind(A, B_new[2, ])
bb cc dd W ee Y
vaccined 12.0 17.2 15.3 14 5.1 9.0
no_vaccined 13.0 7.8 9.7 11 24.9 16.0
NA 0.3 0.6 1.3 0 0.5 0.7
yes 8.5 9.2 5.0 25 13.0 25.7
首先,使用Y
添加两列W
和cbind
,将表格B调整为表格A。正如您在预期输出中所示,这些值分别相加。您可以使用sum
功能。然后你可以rbind
A和B(只有&#34;是&#34;行)。
答案 2 :(得分:0)
如果两个data.frames中没有相同的变量,使用merge
比使用rbind
更安全:
AB <- merge(A, B[B[, 1] == 'yes', ], all = TRUE)
AB
# var bb cc dd ee W Y
# 1 no_vaccined 13.0 7.8 9.7 24.9 11 16.0
# 2 vaccined 12.0 17.2 15.3 5.1 14 9.0
# 3 yes 8.5 9.2 5.0 13.0 NA NA
# 4 <NA> 0.3 0.6 1.3 0.5 0 0.7
您似乎还希望通过插入列总和来为NA
和W
中的Y
计算值,您可以这样做:
AB[, -1][is.na(AB[, -1])] <- colSums(AB[, -1][,colSums(is.na(AB[, -1])) > 0], na.rm = TRUE)
AB
# var bb cc dd ee W Y
# 1 no_vaccined 13.0 7.8 9.7 24.9 11 16.0
# 2 vaccined 12.0 17.2 15.3 5.1 14 9.0
# 3 yes 8.5 9.2 5.0 13.0 25 25.7
# 4 <NA> 0.3 0.6 1.3 0.5 0 0.7
如果我在这里读到的var
实际上是行名,你可以删除[, -1]
。您还需要将[, 1]
中的merge
替换为row.names(B)
。
A <- structure(list(var = structure(c(2L, 1L, NA), .Label = c("no_vaccined",
"vaccined"), class = "factor"), bb = c(12, 13, 0.3), cc = c(17.2,
7.8, 0.6), dd = c(15.3, 9.7, 1.3), W = c(14L, 11L, 0L), ee = c(5.1,
24.9, 0.5), Y = c(9, 16, 0.7)), .Names = c("var", "bb", "cc",
"dd", "W", "ee", "Y"), class = "data.frame", row.names = c(NA,
-3L))
B <- structure(list(var = structure(1:2, .Label = c("no", "yes"), class = "factor"),
bb = c(91.5, 8.5), cc = c(90.8, 9.2), dd = c(95L, 5L), ee = c(87L,
13L)), .Names = c("var", "bb", "cc", "dd", "ee"), class = "data.frame", row.names = c(NA,
-2L))