Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并三个因子,使其因变量在R中求和_R - Fatal编程技术网

合并三个因子,使其因变量在R中求和

合并三个因子,使其因变量在R中求和,r,R,不确定是否有人回答了这个问题——我已经搜索过了,但到目前为止,没有任何东西对我有效。我试图缩小一个非常大的数据集。我需要在我的“PROG”变量(“Grad.2”、“Grad.3”、“Grad.H”)中组合三个因素,以便它们成为单个变量(“Grad”),其中每个可比值集的因变量(“NUMBER”)求和 即 变成 YEAR = "92/93" AGE = "20-24" PROG = "Grad" NUMBER = "77" 然后,我想删除PROG的所有其他因素,这样我就可以比较毕业

不确定是否有人回答了这个问题——我已经搜索过了,但到目前为止,没有任何东西对我有效。我试图缩小一个非常大的数据集。我需要在我的
“PROG”
变量
(“Grad.2”、“Grad.3”、“Grad.H”)
中组合三个因素,以便它们成为单个变量(
“Grad”
),其中每个可比值集的因变量(
“NUMBER”
)求和

变成

YEAR = "92/93"    AGE = "20-24"   PROG = "Grad"   NUMBER = "77"
然后,我想删除
PROG
的所有其他因素,这样我就可以比较毕业生的入学率,而不用担心其他因素(我会单独处理)。因此,我的主动自变量是
年龄
,而因变量是

我希望这充分显示了我的数据:

structure(list
(YEAR = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L), .Label = c("92/93", "93/94", "94/95", "95/96", "96/97", 
    "97/98", "98/99", "99/00", "00/01", "01/02", "02/03", "03/04", 
    "04/05", "05/06", "06/07", "07/08", "08/09", "09/10", "10/11", 
    "11/12", "12/13", "13/14", "14/15", "15/16"), class = "factor"), 
AGE = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L), .Label = c("1-19", 
            "20-24", "25-30", "31-34", "35-39", "40+", "NR", "T.Age"), class = c("ordered", 
            "factor")), 
PROG = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                19L, 19L, 19L), .Label = c("T.Prog", "Basic", "Career", "Grad.H", 
                "Grad2", "Grad3", "Grad2.Qual", "Grad3.Qual", "Health.Res", 
                "NoProg.Grad", "NoProg.Other", "NoProg.Und.Grad", "NoProg.NoCred", 
                "Other", "Post.Und.Grad", "Post.Career", "Pre-U", "Career.Qual", 
                "Und.Grad", "Und.Grad.Qual"), class = "factor"), 
NUMBER = c(104997L, 
                347235L, 112644L, 38838L, 35949L, 50598L, 5484L, 104991L, 
                333807L, 76692L)), row.names = c(7936L, 7948L, 7960L, 7972L, 
            7984L, 7996L, 8008L, 10459L, 10471L, 10483L), class = "data.frame")
至于我为什么使用因子,我不知道我应该如何输入数据。这些因素是有道理的,它们是R在我上传原始数据时解释原始数据的方式

我正在研究下面的建议。虽然还没有成功,但我仍在学习如何让R做我想做的事情,而且经常搞砸。我会尽快回复你们每一个人,只要我有一个合理的答案。(一旦我停止用可怜的头撞桌子……唉)

我想levels()函数就是你想要的。从手册中:

## combine some levels
z <- gl(3, 2, 12, labels = c("apple", "salad", "orange"))
z
levels(z) <- c("fruit", "veg", "fruit")
z
##组合一些级别

z有多种方法可以做到这一点,但我同意FScott的观点,即您可能正在寻找levels()函数来重命名factor levels。下面是我将如何进行第二步求和

library(magrittr)
library(dplyr)

#do the renaming of the PROG variables here

#sum by PROG
df <- df %>%
   group_by(PROG) %>%  # you could add more variable names here to group by i.e. group_by(PROG, AGE, YEAR)
   mutate(group.sum= sum(NUMBER))

旁注:我不建议做上面的块,因为你的数据中有松散的信息,而且你的数据更整洁,只要有额外的列
组。sum

如果我正确理解你的问题,这应该可以做到。 我假设您的数据帧名为
df

library(tidyverse)

df %>%
mutate(PROG = ifelse(PROG %in% c("Grad2", "Grad3","Grad.H"), 
                     "Grad",
                     NA)) %>% ##combines the 3 Grad variables into one
filter(!is.na(PROG)) %>%     ##drops the other variables
group_by(YEAR, AGE) %>%      
summarise(NUMBER = sum(NUMBER)) 

略微不同的方法:只取你想要的因子,去掉因子变量(因为你想把它们作为一个组来对待),然后将所有的
NUMBER
值相加,同时按所有其他变量分组
df
是您的数据

aggregate(formula = NUMBER ~ .,
          data = subset(df, PROG %in% c("Grad2", "Grad3", "Grad.H"), select = -PROG),
          FUN = sum)

欢迎来到SO。要添加数据集,请在R中加载它,并执行类似于dput(head(data,10))
的操作。其中,
data
是data.frame的名称。最后用适当的格式将其粘贴到这里。另外,您的预期输出也不完全清楚。您想将多个观察合并为一个吗?首先为什么要使用
因子
?谢谢您的建议。我试图重新标记这些级别,但最终得到了我想要的3个数据实例,而不是将它们相加。我不确定这是否是你的建议,但这是我的猜测。(对不起,R还不太好。)不知道你的意思。您应该仔细阅读手册,并使用您的数据重新创建手册末尾的示例。谢谢您的建议。我尝试了你的代码,但据我所知,group.sum最终将所有内容都添加到了一起。没有足够的空间在这里发布结果,抱歉。谢谢你的建议。我很感激你解释每一步的意义。不幸的是,我得到了以下错误:mutate_impl(.data,dots)中的错误:求值错误:没有适用于类“logical”对象的“filter_”的方法。我编辑了我的注释,缺少Parethes。还将“Grad.2”和“Grad.3”更改为“Grad2”和“Grad3”,以便它与示例数据集匹配。
#condense df down
df$number <- df$group.sum
df <- df[,-ncol(df)]
df <- unique(df)
library(tidyverse)

df %>%
mutate(PROG = ifelse(PROG %in% c("Grad2", "Grad3","Grad.H"), 
                     "Grad",
                     NA)) %>% ##combines the 3 Grad variables into one
filter(!is.na(PROG)) %>%     ##drops the other variables
group_by(YEAR, AGE) %>%      
summarise(NUMBER = sum(NUMBER)) 
aggregate(formula = NUMBER ~ .,
          data = subset(df, PROG %in% c("Grad2", "Grad3", "Grad.H"), select = -PROG),
          FUN = sum)