R:如何在我的数据上使用自定义函数
我正在使用R进行数据分析,但在编码方面有一些问题。 我创建了自己的函数来创建频率表,并将其应用于数据中的变量,但R显示了错误消息 有谁能给我任何解决方案,为什么它不起作用R:如何在我的数据上使用自定义函数,r,dplyr,R,Dplyr,我正在使用R进行数据分析,但在编码方面有一些问题。 我创建了自己的函数来创建频率表,并将其应用于数据中的变量,但R显示了错误消息 有谁能给我任何解决方案,为什么它不起作用 > str(diabetes) Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 56632 obs. of 30 variables: $ ID : chr "A308059801" "A308059802" "A308120201" "A308120202" .
> str(diabetes)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 56632 obs. of 30 variables:
$ ID : chr "A308059801" "A308059802" "A308120201" "A308120202" ...
$ year : num 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
$ region : num 1 1 1 1 1 1 1 1 1 1 ...
$ sex : num 1 2 1 2 2 1 2 1 2 1 ...
$ age : num 61 54 33 33 4 65 59 54 49 18 ...
$ edu : chr "3.000000" "2.000000" "3.000000" "4.000000" ...
$ occp : chr "5.000000" "3.000000" "4.000000" "1.000000" ...
$ marri_1 : 'labelled' num 1 1 1 1 2 1 1 1 1 2 ...
..- attr(*, "label")= chr "Marriage Y/N"
$ marri_2 : 'labelled' num 1 1 1 1 8 1 1 1 1 8 ...
..- attr(*, "label")= chr "Marriage status"
$ tins : 'labelled' num 10 20 10 10 10 20 20 10 10 10 ...
..- attr(*, "label")= chr "Insurance registration"
$ D_1_1 : 'labelled' chr "3.000000" "2.000000" "2.000000" "3.000000" ...
..- attr(*, "label")= chr "Self-report health status"
$ DI1_dg : 'labelled' chr "1.000000" "8.000000" "8.000000" "8.000000" ...
..- attr(*, "label")= chr "HBP diagnosis"
$ DI1_pr : 'labelled' chr "1.000000" "8.000000" "8.000000" "8.000000" ...
..- attr(*, "label")= chr "HBP current status"
$ DI1_pt : 'labelled' chr "1.000000" "8.000000" "8.000000" "8.000000" ...
..- attr(*, "label")= chr "HBP care"
$ DE1_dg : 'labelled' chr "8.000000" "8.000000" "8.000000" "8.000000" ...
..- attr(*, "label")= chr "Diabetes diagnosis"
$ DE1_pr : 'labelled' chr "8.000000" "8.000000" "8.000000" "8.000000" ...
..- attr(*, "label")= chr "Diabetes status"
$ DE1_pt : 'labelled' chr "8.000000" "8.000000" "8.000000" "8.000000" ...
..- attr(*, "label")= chr "Diabetes cure"
$ HE_DMdg : 'labelled' chr "0.000000" "0.000000" "0.000000" "0.000000" ...
..- attr(*, "label")= chr "Diabetes doctor diagnosis"
$ HE_BMI : 'labelled' chr "26.177198" "22.807647" "26.562865" "20.863743" ...
..- attr(*, "label")= chr "BMI"
$ HE_DM : 'labelled' chr "2.000000" "3.000000" "1.000000" "1.000000" ...
..- attr(*, "label")= chr "With diagnosis(over 19 year-old)"
$ LQ4_07 : 'labelled' chr "8.000000" "8.000000" "8.000000" "8.000000" ...
..- attr(*, "label")= chr "Barries for physical activity - diabetes"
$ HE_DMfh1 : 'labelled' chr "0.000000" "0.000000" "9.000000" "1.000000" ...
..- attr(*, "label")= chr "Father with diagnosis"
$ HE_DMfh2 : 'labelled' chr "1.000000" "0.000000" "9.000000" "0.000000" ...
..- attr(*, "label")= chr "Mother with diagnosis"
$ HE_DMfh3 : 'labelled' chr "0.000000" "0.000000" "9.000000" "0.000000" ...
..- attr(*, "label")= chr "Sibling with diagnosis"
$ HE_glu : 'labelled' chr "124.000000" "141.000000" "92.000000" "88.000000" ...
..- attr(*, "label")= chr "Diabetes indicator - glucose level"
$ BE5_1 : 'labelled' chr "1.000000" "1.000000" "1.000000" "1.000000" ...
..- attr(*, "label")= chr "Muscle training frequency"
$ LQ4_04 : 'labelled' chr "8.000000" "8.000000" "8.000000" "8.000000" ...
..- attr(*, "label")= chr "Barriers for physical activity - Have heart disease"
$ DF2_dg : 'labelled' chr "8.000000" "8.000000" "8.000000" "8.000000" ...
..- attr(*, "label")= chr "Diagnosed with depression"
$ HE_IHDfh1: 'labelled' chr "0.000000" "0.000000" "9.000000" "0.000000" ...
..- attr(*, "label")= chr "Diagnosed with Ischaemic heart disease"
$ HE_HP : 'labelled' chr "3.000000" "3.000000" "2.000000" "1.000000" ...
..- attr(*, "label")= chr "Hypertension Status (three levels)"
freq_table <- function (y) {
d <- select (y) %>% group_by (y) %>% summarise (n = n ()) %>% mutate (freq = n / sum (n))
}
lapply(diabetes$marri_1, freq_table)
str(糖尿病)
类“tbl_df”、“tbl”和“data.frame”:56632 obs。在30个变量中:
$ID:chr“A308059801”“A308059802”“A308120201”“A308120202”。。。
$year:num 2010。。。
$region:num 1 1。。。
$sex:num 12 12 12 1。。。
$age:num 61 54 33 4 65 59 54 49 18。。。
$edu:chr“3.000000”“2.000000”“3.000000”“4.000000”。。。
$occp:chr“5.000000”“3.000000”“4.000000”“1.000000”。。。
$marri_1:'标记为'num 1 2 1 2。。。
..-属性(*,“标签”)=chr“婚姻Y/N”
$marri_2:'标记为'num 1 8 1 8。。。
..-属性(*,“标签”)=chr“婚姻状况”
$tins:“标签”数字10 20 10 10 20 10 10 10 10 10。。。
..-属性(*,“标签”)=chr“保险登记”
$D_1_1:'标签为'chr“3.000000”“2.000000”“2.000000”“3.000000”。。。
..-属性(*,“标签”)=chr“自我报告健康状态”
$DI1_dg:'标签为'chr“1.000000”“8.000000”“8.000000”“8.000000”。。。
..-属性(*,“标签”)=chr“HBP诊断”
$DI1_pr:'标签为'chr“1.000000”“8.000000”“8.000000”“8.000000”。。。
..-属性(*,“标签”)=chr“HBP当前状态”
$DI1_pt:'标签为'chr“1.000000”“8.000000”“8.000000”“8.000000”。。。
..-属性(*,“标签”)=chr“HBP护理”
$DE1_dg:'标签为'chr“8.000000”“8.000000”“8.000000”“8.000000”。。。
..-attr(*,“标签”)=chr“糖尿病诊断”
$DE1_pr:'标签为'chr“8.000000”“8.000000”“8.000000”“8.000000”。。。
..-attr(*,“标签”)=chr“糖尿病状态”
$DE1_pt:'标签为'chr“8.000000”“8.000000”“8.000000”“8.000000”。。。
..-attr(*,“标签”)=chr“糖尿病治疗”
$HE_DMdg:'标签为'chr“0.000000”“0.000000”“0.000000”“0.000000”。。。
..-attr(*,“标签”)=chr“糖尿病医生诊断”
$HE_BMI:'标签为'chr“26.177198”“22.807647”“26.562865”“20.863743”。。。
..-属性(*,“标签”)=chr“BMI”
$HE_DM:'标签为'chr“2.000000”“3.000000”“1.000000”“1.000000”。。。
..-attr(*,“标签”)=chr,有诊断(19岁以上)
$LQ4_07:'标签为'chr“8.000000”“8.000000”“8.000000”“8.000000”。。。
..-attr(*,“标签”)=chr“体力活动障碍-糖尿病”
$HE_DMfh1:'标签为'chr“0.000000”“0.000000”“9.000000”“1.000000”。。。
..-attr(*,“标签”)=chr“诊断父亲”
$HE_DMfh2:'标签为'chr“1.000000”“0.000000”“9.000000”“0.000000”。。。
..-attr(*,“标签”)=chr“有诊断的母亲”
$HE_DMfh3:'标签为'chr“0.000000”“0.000000”“9.000000”“0.000000”。。。
..-attr(*,“标签”)=chr“诊断同级”
$HEU glu:'标签为'chr“124000000”“141000000”“92000000”“88000000”。。。
..-attr(*,“标签”)=chr“糖尿病指标-血糖水平”
$BE5_1:'标签为'chr“1.000000”“1.000000”“1.000000”“1.000000”。。。
..-attr(*,“标签”)=chr“肌肉训练频率”
$LQ4_04:'标签为'chr“8.000000”“8.000000”“8.000000”“8.000000”。。。
..-attr(*,“标签”)=chr“体力活动障碍-患有心脏病”
$DF2_dg:'标签为'chr“8.000000”“8.000000”“8.000000”“8.000000”。。。
..-attr(*,“标签”)=chr“诊断为抑郁症”
$HE_IHDfh1:'标签为'chr“0.000000”“0.000000”“9.000000”“0.000000”。。。
..-attr(*,“标签”)=chr“诊断为缺血性心脏病”
$HEU HP:'标签为'chr“3.000000”“3.000000”“2.000000”“1.000000”。。。
..-属性(*,“标签”)=chr“高血压状态(三级)”
频率表%总结(n=n())%>%变异(频率=n/总和(n))
}
lapply(糖尿病$marri_1,频率表)
选择函数位于管道的开头,至少需要两个参数,您可以将数据帧的名称添加到参数函数中 此外,由于y存储在变量中,因此在使用
dplyr
动词时,必须通过添加来取消引用它代码>在它之前
library(tidyverse)
# add df as an argument and add it before the select
freq_table <- function (df,y) {
d <- df %>% select (!! y) %>% group_by (!! y) %>% summarise (n = n ()) %>% mutate (freq = n / sum (n))
}
freq_table(diabetes,"marri_1")
库(tidyverse)
#添加df作为参数,并将其添加到select
频率表%groupby(!!y)%%>%总结(n=n())%%>%变异(频率=n/sum(n))
}
频率表(糖尿病,“marri_1”)
或者用一种更简单的方式
tab <- table(diabetes$marri_1)
tab <- as.data.frame(tab)
names(tab) <- c("marri_1","n")
tab$freq <- tab$n /sum(tab$n)
选项卡1str
将无助于调试您的问题。您可能需要共享dput
。2.基于此dput
显示您期望的输出?第一个建议不起作用。第二个建议很有效。我可能不了解R中的数据帧,但通常情况下,您建议的代码应该可以工作(实际上,在问这个问题之前,我尝试了与您建议的代码相同的代码)。你能解释一下为什么它真的不起作用吗?这是因为当你评估freq\u table
时,y中的引号,我已经更新了我的答案,代码>取消引号y