可能的重复:
在 R 中的子集数据框中删除因子级别
我有一个包含多个变量的数据框,我正在使用它运行混合模型lme()
。其中一个变量 ForAgeCat 有五个因子水平:1、2、3、4、5。
str(mvthab.3hr.fc$ForAgeCat)
>Factor w/ 5 levels "1","2","3","4",..: 5 5 5 5 5 5 5 5 5 5 ...
Run Code Online (Sandbox Code Playgroud)
问题是因子级别 3 实际上不存在,也就是说,在这个数据集(这是一个较大数据集的子集)中没有来自因子级别 3 的观察结果,我认为这扰乱了我在 lme() 中的建模。有人可以帮我从因子级别列表中删除/消除因子级别 3 吗?
我知道很多帖子已经回答了像我这样的类似问题,但我已经尝试了两天了,似乎我在这里没有看到图片......
\n\n我得到的 csv 文件如下所示:
\n\nWerteformat: wertabh. (Q)\nWerte: \n01.01.76 00:00 0,363\n02.01.76 00:00 0,464\n...\n31.12.10 00:00 1,03\n01.01.11 00:00 L\xc3\xbccke\n
Run Code Online (Sandbox Code Playgroud)\n\n我想用数据创建时间线,但无法正确导入 csv。
\n\n到目前为止我已经尝试过:
\n\ndata<-read.csv2(file, \n header = FALSE, \n sep = ";", \n quote="\\"", \n dec=",", \n col.names=c("Datum", "Abfluss"), \n skip=2, \n nrows=length(strs)-2, \n colClasses=c("date","numeric"))`\n
Run Code Online (Sandbox Code Playgroud)\n\n但后来我明白了
\n\n"Fehler in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : \n scan() erwartete \'a real\', bekam \'L\xef\xbf\xbdcke\'"\n
Run Code Online (Sandbox Code Playgroud)\n\n所以我删除了 colClasses 并且它起作用了,我删除了所有不需要的行。但是:一切都是因素。所以我使用 as.numeric
\n\nAbfluss1<-as.numeric(data$Abfluss)\n
Run Code Online (Sandbox Code Playgroud)\n\n知道我可以用 Abfluss 1 进行计算,但这些值与原始 …
我有一个 df 其中value
指示 a 的状态drug
:
g1 = data.frame (
drug = c('a','a','a','d','d'),
value = c('fda','trial','case','case','pre')
)
drug value
1 a fda
2 a trial
3 a case
4 d case
5 d pre
Run Code Online (Sandbox Code Playgroud)
drug
因此,对于药物,我想根据以下优先级顺序替换任何重复value
:
fda > trial > case > pre
Run Code Online (Sandbox Code Playgroud)
例如,如果药物 d 既是“病例”又是“前”,则 d 的所有发生率都将被重新分类为“病例”。决赛桌应该是这样的。
drug value
1 a fda
2 a fda
3 a fda
4 d case
5 d case
Run Code Online (Sandbox Code Playgroud)
如何做到这一点,而不必循环遍历每种药物并首先找出优先级然后进行替换?
我有一个问题:是否有 R 函数可以自动将二进制变量编码为因子?
我有一个包含超过 80 个变量(列)的 tibble,其中许多变量具有布尔性质(0、1 和 NA),R 作为numeric导入。由于我想避免手动将它们转换为Factor,我想知道是否有一个函数能够自动检测a (或 a ) 中的二进制数值变量并将它们更改为 Factor ?我可以自己创建这样的函数,但如果它已经存在,为什么还要麻烦呢?data.frame
tibble
经过bind_rows()
一些大的 data.frames 之后,我最终得到一个像这样的 data.frame:
tmp <- data.frame(Query=c("A", "B", "C", "D", "A"), target=c("D", "A", "A", "A", "B"), values=runif(5))
tmp
Query target values
1 A D 0.06075322
2 B A 0.43179750
3 C A 0.32325309
4 D A 0.26714620
5 A B 0.96854999
Run Code Online (Sandbox Code Playgroud)
我需要删除之前在任一方向上出现过的包含Query
和组合的所有行target
(AxD 是 DxA 的重复项)。在示例中,所需的输出为(因为第 4 行是第 1 行的重复项,第 5 行是第 2 行的重复项)
tmp
Query target values
1 A D 0.06075322
2 B A 0.43179750
3 C A 0.32325309
Run Code Online (Sandbox Code Playgroud)
非常感谢!
我有一个数据框,其中的列包含可变数量的数字和可变数量的NA.数据框如下所示:
V1 V2 V3 V4 V5 V6
1 0 11 4 0 0 10
2 0 17 3 0 2 2
3 NA 0 4 0 1 9
4 NA 12 NA 1 1 0
<snip>
743 NA NA NA NA 8 NA
744 NA NA NA NA 0 NA
Run Code Online (Sandbox Code Playgroud)
我想制作一个箱形图,但是当我这样做的时候
boxplot(dataframe)
Run Code Online (Sandbox Code Playgroud)
我收到了错误
adding class "factor" to an invalid object
Run Code Online (Sandbox Code Playgroud)
当我做
lapply(dataframe,class)
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
$V1
[1] "factor"
$V2
[1] "factor"
<snip>
$V6
[1] "factor"
Run Code Online (Sandbox Code Playgroud)
那么如何更改我的数据框以便将列视为数字?
我有下面的代码,如果m == 2则cd仍然是数据帧,而名称(cd)来自原始数据帧d.但是,如果m == 3,则数据帧中只有一列仍然存在而cd变为一个因子而我丢失了名称......
samplesize <-100
g1 <- gl(2,samplesize/2,labels=c("V","M"))
g2 <- gl(3,samplesize/3,labels=c("V","M","U"))
m <- 2
d <- data.frame(g1,g2)
l <- sapply(d,nlevels)
cd <- d[,l <= m]
names(cd)
Run Code Online (Sandbox Code Playgroud)
即使过滤器只留下一列,我还想保留d的名称?
我有一个按预期工作的函数,直到我将其子集化.plotCalendar()函数是我使用ggplot2和facet在Calendar热图上的尝试.y轴顺序很重要,因为它是"WeekOfMonth" - 当订单被颠倒时,数据viz看起来不像日历.
代码如下,首先是调用代码,然后是生成一些数据的函数 - generateData(),然后是plot函数 - plotCalendar()
当我使用df作为数据时,代码按预期工作,但是当我使用df2(子集化数据)时,WeekOfMonth的顺序沿y轴反转.
library(ggplot2)
library(ProgGUIinR)
library(chron)
df <- generateData()
plotCalendar(df, dateFieldName = "dates", numericFieldName = "counts", yLab = "Month of Year")
df2 <- df[df$filterField == 42, ]
plotCalendar(df2, dateFieldName = "dates", numericFieldName = "counts", yLab = "Month of Year")
Run Code Online (Sandbox Code Playgroud)
generateData <- function()
{
set.seed(42)
dates <- seq(as.Date("2012/01/01"), as.Date("2012/6/30"), by = "1 day")
counts <- 1:length(dates)
filterField <- sample(1:42,length(dates),replace=T)
df <- data.frame(dates, counts, filterField)
return(df)
}
plotCalendar <- function(data, dateFieldName, numericFieldName, title = "Title", …
Run Code Online (Sandbox Code Playgroud) 我DF
只有一个专栏:DF$A
。这是我需要以特定方式重新排列名称的因素:
l
pheno
l.ldl.a
m.ldl.b
s.ldl.c
x.vldl.b
l.vldl.c
m.vldl.d
s.vldl.f
xs.vldl.h
xxl.vldl.a
xl.hdl.a
l.hdl.b
m.hdl.c
s.hdl.d
Run Code Online (Sandbox Code Playgroud)
我尝试根据两个column 2
顺序重新创建DF$A
reorderLevels <- c(XXL.VLDL,XL.VLDL,L.VLDL,M.VLDL,S.VLDL,XS.VLDL,
IDL,L.LDL,M.LDL,S.LDL,XL.HDL,L.HDL,M.HDL,S.HDL)
Run Code Online (Sandbox Code Playgroud)
无需关心名称的最后一部分。
我知道如何根据名称的第一部分(第一个点之前)或根据名称的第二部分(点之间的部分)重新排序,但是我不知道如何根据名称的两个部分进行排序。
到目前为止,我可以使用以下命令对其重新排序,但仅根据名称的一部分
l1 <- l %>% mutate(m2 = match(sapply(strsplit(l$pheno, "[.]"),
function(x) x[1]), reorderLevels)) %>%
arrange(m2) %>%
select(-m2)
Run Code Online (Sandbox Code Playgroud) 我明白如何在明确定义列名时更改列的级别,如本例中的Matt Dowle所示:
setattr(mydt$value,"levels",c(...))
Run Code Online (Sandbox Code Playgroud)
但是,在现实生活中的问题中,您通常不知道列名.当代码中没有明确给出"value"时,这种技术似乎不起作用:
setattr(mydt[,get("value")],"levels",c(...))
Run Code Online (Sandbox Code Playgroud)
这是一个问题.我想这个语法给我的副本列而不是对列的引用,与mydt $ value相反,但我不知道如何解决这个问题:'(
谢谢
请看这个较旧的问题