我在尝试在数据框架中创建新的分类变量时遇到问题,该数据框架基于预先确定的数据框中哪些行应编码为1或0的列表。
我正在尝试在大型数据集(174020x514)中执行此操作,但为了概念的可重复性,我将使用mtcars
数据集。基本上我有一个包含行号列表的向量x
我想重新编码数据。
df<-mtcars
cat=vector("numeric",length=nrow(df))
df<-cbind(df,cat)
x<-c(1,3,5,8,32)
df$cat[nrow(df)==x]<-1
df$cat[nrow(df)!=x]<-0
df$cat
所以我想要的结果是行编号1,3,5,8和32在新的分类列中编码为1,其余编号为0.我在使用ifelse
语句时也遇到了问题因为列表x
。
答案 0 :(得分:2)
由于您的数据框很大,可以使用data.table
:
library(data.table)
setDT(df)[, cat := 0L][x, cat := 1][, cat := as.factor(cat)]
我们首先创建一个列cat
,它通过引用等于零。然后,将x
中的所有行分配为1.
如果cat
不需要factor
类,请使用此代码:
setDT(df)[, cat := 0L][x, cat := 1]
答案 1 :(得分:1)
我们可以使用dplyr
library(dplyr)
library(magrittr)
df %<>%
mutate(cat = +(row_number() %in% x))
答案 2 :(得分:0)
试试这个:
df$cat[(1:32)%in%x]<-1
df$cat[!(1:32)%in%x]<-0
df$cat
[1] 1 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
答案 3 :(得分:0)
您可以使用for ($x=strtotime('2015-12-01');$x<=strtotime('2015-12-30');$x+=86400)
echo date('Y-m-d',$x);
索引data.frame,而无需对行数进行硬编码:
x