【发布时间】:2017-03-21 00:37:15
【问题描述】:
我有这个数据框:
> str(DFPA)
List of 10
$ Quest : chr [1:1917] "2" "3" "4" "5" ...
$ PASM : chr [1:1917] "127.5" "107" "111.5" "103" ...
$ PADM : chr [1:1917] "85.5" "58.5" "73" "69" ...
$ PAM : chr [1:1917] "99.5" "74.6666666666667" "85.8333333333333" "80.3333333333333" ...
$ PP : chr [1:1917] "42" "48.5" "38.5" "34" ...
$ Idade : chr [1:1917] "52" "53" "47" "44" ...
$ CCor : chr [1:1917] "B" "B" "PD" "PD" ...
$ CGI : chr [1:1917] "3º" "3º" "3º" "3º" ...
$ Sexo : chr [1:1917] "F" "F" "M" "M" ...
$ FEtária: chr [1:1917] "C" "C" "C" "B" ...
但是,我基于 DFPA 创建了另外 3 个数据框:DFPAA、DFPAB 和 DFPC,它们具有相同的变量,但它们除以年龄、A(25-34 岁)、B(35-44)、C (45-59)。然后,出现这个错误:
library(dplyr)
> DFPAA <- filter(DFPA, FEtária == "A")
Error in UseMethod("filter_") :
no applicable method for 'filter_' applied to an object of class "list"
>
> DFPAB <- filter(DFPA, FEtária == "B")
Error in UseMethod("filter_") :
no applicable method for 'filter_' applied to an object of class "list"
>
> DFPAC <- filter(DFPA, FEtária == "C")
Error in UseMethod("filter_") :
no applicable method for 'filter_' applied to an object of class "list"
我已经搜索了这个错误,但答案并没有解决问题。
我遇到的另一个问题是从 SAS 合并另一个数据帧:
install.packages("memisc")
library(memisc)
data <- as.data.set(spss.system.file("medicamentos_fase4a_pro_saude.sav"))
Medicamentos <- subset(data, select = c(quest, med_rec))
View(Medicamentos)
library(plyr)
Med <- ddply(Medicamentos, .(quest), summarize, Rem = paste (med_rec, collapse =", "))
names(Med)[names(Med) == 'quest'] <- 'Quest'
DFPA <- merge (DFPA, Med, by = "Quest")
然后,当合并发生时:
head(DFPA)
Quest PASM PADM PAM PP Idade CCor CGI Sexo FEtária
1 1002 102 67.5 79 34.5 58 PD 2º F C
2 1003 99 57 71 42 55 PD 3º F C
3 1005 115 74 87.6666666666667 41 52 B 3º F C
4 1006 152 91 111.333333333333 61 52 PD 2º F C
5 1007 110.5 69 82.8333333333333 41.5 41 PD 3º F B
6 1012 119 74.5 89.3333333333333 44.5 57 P 3º F C
Rem
1 ezetimiba+sinvastatina, fitoterápico, nimesulida, quitosana, vitamina
2 cumarina+troxerrutina, ergotamina+cafeína+dipirona, oxibutinina
3 dipirona, escopolamina
4 anlodipino, hidroclorotiazida, losartana, não-classificado
5 desogestrel
6 anlodipino, atenolol
Quest 的升序完全疯狂,我无法组织这个。
然后,当我创建一个包含抗高血压药物的列表以使用此功能从数据框中排除时:
ListadeMedicamentos <- c("...", ...)
DFPA2 <- DFPA[ !DFPA$Rem %in% ListaMedicamentosHAS, ]
它排除了一些行,但不排除其他行。不是这个数据框上的每个人都使用药物,所以我预计合并可能会产生一些 NA,但它没有,我认为这是错误的。
我使用ggplot时出现的另一个问题,出现这个错误:error-discrete-value-supplied-to-continuous-scale
这是我正在使用的模型:
GSS <- ggplot(DFPA, aes(x=PASM, fill=Sexo)) + geom_density(alpha=.3) + scale_x_continuous (name = "Pressão Arterial Sistólica Média", limits = c(86, 230)) + scale_y_continuous(name = "Probabilidade", limits = c(0, 0.06))
所以,我有 3 个问题:过滤函数、列表和 ggplot!
谢谢!
编辑:
DFPA <- as.data.frame(DFPA)
class(DFPA)
data.frame
head(DFPA)
Quest PASM PADM PAM PP Idade CCor CGI Sexo FEtária
1 2 127.5 85.5 99.5 42 52 B 3º F C
2 3 107 58.5 74.6666666666667 48.5 53 B 3º F C
3 4 111.5 73 85.8333333333333 38.5 47 PD 3º M C
4 5 103 69 80.3333333333333 34 44 PD 3º M B
5 7 112.5 72.5 85.8333333333333 40 54 PD 3º F C
6 8 99 62.5 74.6666666666667 36.5 54 B 2º M C
所以,现在我可以合并 2 个数据框,没关系。
但是,我无法创建包含列值的数据子集 (FEtária)
> DFPAC <- DFPA[DFPA$FEtária == "C", ]
Error in DFPA[DFPA$FEtária == "C", ] : incorrect number of dimensions
> DFPAc <- subset(DFPA, FEtária == "C")
> View(DFPAC)
Error in View : arguments imply differing number of rows: 1917, 0
> sel <- apply(DFPA[,FEtária],1,function(row) length(grep("C",row))>0)
Error in DFPA[, FEtária] : incorrect number of dimensions
>
> class(FEtária)
[1] "factor"
> DFPAC <- subset(DFPA, grepl("C", DFPA$FEtária))
>
> View(DFPAC)
Error in View : arguments imply differing number of rows: 1917, 0
> DFPAC <- DFPA[grep("C", DFPA$FEtária), ]
Error in DFPA[grep("C", DFPA$FEtária), ] : incorrect number of dimensions
> class(DFPA)
[1] "list"
> DFPA <- as.data.frame(DFPA)
> > DFPAC <- DFPA[grep("C", DFPA$FEtária), ]
Error: unexpected '>' in ">"
>
> DFPAC <- DFPA[grep("C", DFPA$FEtária), ]
>
> View(DFPAc)
Error in View : arguments imply differing number of rows: 1917, 0
我不知道如何排除列表中包含相同“值”的行。 grepl() 不起作用:
> Med <- Med[!grepl(ListadeMedicamentosHAS, Med$Rem), ]
Error in Med[!grepl(ListadeMedicamentosHAS, Med$Rem), ] :
incorrect number of dimensions
In addition: Warning message:
In grepl(ListadeMedicamentosHAS, Med$Rem) :
argument 'pattern' has length > 1 and only the first element will be used
> DFPAC <- filter(DFPA, !grepl("ListadeMedicamentosHAS"))
Error in filter_impl(.data, dots) :
argument "x" is missing, with no default
我认为我的帖子非常混乱,所以我会尽量简化它:我有 DFPA,然后我需要根据“FEtária”对它进行子集化,它有 3 个值(A、B 和 C)。与此同时,在您的帮助下,我需要从 DFPA 中排除“ListadeMedicamentos”中的所有高血压药物,我现在已经正确合并了!
谢谢你们!
【问题讨论】:
-
对于第一点,你没有
data.frame,它是list。 -
您拥有的数据是
list,就像尼克建议的那样。您能否将list转换为data.frame并发布您的示例数据。 -
舒尔,我会编辑的