R中按列列出的汇总数据
我有以下数据R中按列列出的汇总数据,r,summarize,R,Summarize,我有以下数据 pt_id <- c(1,1,1,1,1,2,2,2,3,3,3,3,3,4,4,4,4) Tob_pk <- c(2, 5, 7, 1, 8, 12, 14, 3, 6, 8, 10, 20, 13, 5, 4, 12, 10) Tobacco <- c("Once","Twice","Never", NA, NA, NA, NA, NA,"Once","Twice&quo
pt_id <- c(1,1,1,1,1,2,2,2,3,3,3,3,3,4,4,4,4)
Tob_pk <- c(2, 5, 7, 1, 8, 12, 14, 3, 6, 8, 10, 20, 13, 5, 4, 12, 10)
Tobacco <- c("Once","Twice","Never", NA, NA, NA, NA, NA,"Once","Twice","Quit","Once",NA,NA,"Never", NA, "Never")
Alcohol <- c("Twice", "Once",NA, NA, "Never", NA, NA, "Once", NA, "Quit", "Twice", NA, "Once", NA, NA, "Never", "Never")
PA <- c("Once",NA,"Never", NA, NA, NA, NA, NA,"Once",NA,"Quit","Once",NA,NA,"Never", NA, NA)
mydata <- data.frame(pt_id, Tob_pk, Tobacco, Alcohol, PA)
mydata
我不确定我会错在哪里。如果我能得到任何建议,以获得以下输出,但也有NA的百分比,这将是很有帮助的
Tobacco Alcohol PA
Never 0.3333333 Never 0.3333333 Never 0.3333333
Once 0.3333333 Once 0.3333333 Once 0.5000000
Quit 0.1111111 Quit 0.1111111 Quit. 0.1666667
Twice 0.2222222 Twice 0.2222222
提前谢谢 使用base
pt_id 3 0.3333333 0.5000000 0.1666667 NA
2018年1月1日由v0.3.0使用基础创建
pt_id 3 0.3333333 0.5000000 0.1666667 NA
2018年1月1日由v0.3.0使用dplyr创建:
library(tidyverse)
df <- mydata %>%
select(3:5) %>%
gather('Your_vice', 'freq', 1:3) %>%
group_by(Your_vice, freq) %>%
summarize(n = n()) %>%
mutate(perc = n/sum(n))
df
# A tibble: 14 x 4
# Groups: Your_vice [3]
Your_vice freq n perc
<chr> <chr> <int> <dbl>
1 Alcohol Never 3 0.176
2 Alcohol Once 3 0.176
3 Alcohol Quit 1 0.0588
4 Alcohol Twice 2 0.118
5 Alcohol NA 8 0.471
6 PA Never 2 0.118
7 PA Once 3 0.176
8 PA Quit 1 0.0588
9 PA NA 11 0.647
10 Tobacco Never 3 0.176
11 Tobacco Once 3 0.176
12 Tobacco Quit 1 0.0588
13 Tobacco Twice 2 0.118
14 Tobacco NA 8 0.471
使用dplyr:
library(tidyverse)
df <- mydata %>%
select(3:5) %>%
gather('Your_vice', 'freq', 1:3) %>%
group_by(Your_vice, freq) %>%
summarize(n = n()) %>%
mutate(perc = n/sum(n))
df
# A tibble: 14 x 4
# Groups: Your_vice [3]
Your_vice freq n perc
<chr> <chr> <int> <dbl>
1 Alcohol Never 3 0.176
2 Alcohol Once 3 0.176
3 Alcohol Quit 1 0.0588
4 Alcohol Twice 2 0.118
5 Alcohol NA 8 0.471
6 PA Never 2 0.118
7 PA Once 3 0.176
8 PA Quit 1 0.0588
9 PA NA 11 0.647
10 Tobacco Never 3 0.176
11 Tobacco Once 3 0.176
12 Tobacco Quit 1 0.0588
13 Tobacco Twice 2 0.118
14 Tobacco NA 8 0.471
您可以将变量转换为具有相应级别的因子。然后,带有选项useNA=ifany的表格显示NA
您可以将变量转换为具有相应级别的因子。然后,带有选项useNA=ifany的表格显示NA
下面是一个使用prop.table+table+na.omit+factor的基本R选项 给
Tobacco Alcohol PA
Once 0.3333333 0.3333333 0.5000000
Twice 0.2222222 0.2222222 0.0000000
Never 0.3333333 0.3333333 0.3333333
Quit 0.1111111 0.1111111 0.1666667
下面是一个使用prop.table+table+na.omit+factor的基本R选项 给
Tobacco Alcohol PA
Once 0.3333333 0.3333333 0.5000000
Twice 0.2222222 0.2222222 0.0000000
Never 0.3333333 0.3333333 0.3333333
Quit 0.1111111 0.1111111 0.1666667
谢谢你的帮助!在我的原始数据集中,我几乎有35个变量/列,其中一些是dbl变量,而不是字符变量。是否有一种方法可以跳过代码中带有dbl变量的列,而不必手动选择一个范围,例如3:5和8:5?我们可以将base R代码的输出导出到excel文件中吗?请像下面这样尝试:map\u dfr.x=selectmydata,whereis.character,.f=prop.tabletable.xforbase cols\u char谢谢您的帮助!在我的原始数据集中,我几乎有35个变量/列,其中一些是dbl变量,而不是字符变量。是否有一种方法可以跳过代码中带有dbl变量的列,而不必手动选择一个范围,例如3:5,然后是8:5?我们可以将基本R代码的输出导出到excel文件中吗?请像下面这样尝试:map\u dfr.x=selectmydata,whereis.character,.f=prop.tabletable.xforbase cols\u char可以将输出导出到excel文件中吗?我试着使用write.xlsxres2,file=myDATA.xlsx,sheetName=res2,col.names=TRUE,row.names=TRUE,append=FALSE,但它不起作用!是否可以将输出导出到excel文件?我试着使用write.xlsxres2,file=myDATA.xlsx,sheetName=res2,col.names=TRUE,row.names=TRUE,append=FALSE,但它不起作用!
do.call(
cbind,
lapply(
mydata[3:5],
function(x) {
prop.table(
table(
na.omit(
factor(x, levels = unique(na.omit(unlist(mydata[3:5]))))
)
)
)
}
)
)
Tobacco Alcohol PA
Once 0.3333333 0.3333333 0.5000000
Twice 0.2222222 0.2222222 0.0000000
Never 0.3333333 0.3333333 0.3333333
Quit 0.1111111 0.1111111 0.1666667