相关疑难解决方法(0)

自动将R因子扩展为每个因子级别的1/0指标变量的集合

我有一个R数据帧,其中包含我想要"扩展"的因子,因此对于每个因子级别,新数据帧中都有一个关联列,其中包含1/0指示符.例如,假设我有:

df.original <-data.frame(eggs = c("foo", "foo", "bar", "bar"), ham = c(1,2,3,4))
Run Code Online (Sandbox Code Playgroud)

我想要:

df.desired  <- data.frame(foo = c(1,1,0,0), bar=c(0,0,1,1), ham=c(1,2,3,4))
Run Code Online (Sandbox Code Playgroud)

因为对于某些分析的,你需要有一个完全的数字数据帧(例如,主成分分析),我认为这功能可能是内置的.写一个函数来做到这一点应该不会太难,但我可以预见到一些与列名相关的挑战,如果已存在某些内容,我宁愿使用它.

r

100
推荐指数
5
解决办法
5万
查看次数

从分类变量创建新的虚拟变量列

我有几个数据集,75,000个观测值和一个type可以取值0-4 的变量.我想为所有类型的每个数据集添加五个新的虚拟变量.我能想出的最佳方法如下:

# For the 'binom' data set create dummy variables for all types in all data sets
binom.dummy.list<-list()
for(i in 0:4){
    binom.dummy.list[[i+1]]<-sapply(binom$type,function(t) ifelse(t==i,1,0))
}

# Add and merge data
binom.dummy.df<-as.data.frame(do.call("cbind",binom.dummy.list))
binom.dummy.df<-transform(binom.dummy.df,id=1:nrow(binom))
binom<-merge(binom,binom.dummy.df,by="id")
Run Code Online (Sandbox Code Playgroud)

虽然这很有效,但速度非常慢(合并功能甚至已经崩溃了几次).有没有更有效的方法来做到这一点?也许这个功能是我不熟悉的软件包的一部分?

r

39
推荐指数
3
解决办法
8万
查看次数

来自字符串变量的虚拟变量

我想从这个数据集创建虚拟变量:

DF<-structure(list(A = c(1, 2, 3, 4, 5), B = c("1,3,2", "2,1,3,6", 
  "3,2,5,1,7", "3,7,4,2,6,5", "4,10,7,3,5,6")), .Names = c("A", "B"), 
              row.names = c(NA, 5L), class = "data.frame")
> DF
  A                  B
1 1              1,3,2
2 2            2,1,3,6
3 3          3,2,5,1,7
4 4        3,7,4,2,6,5
5 5       4,10,7,3,5,6
Run Code Online (Sandbox Code Playgroud)

期望的输出应该如下所示:

A  1  2  3  4  5  6  7  8  9  10
1  1  1  1  0  0  0  0  0  0  0
2  1  1  1  0  0  1  0  0  0  0
3 …
Run Code Online (Sandbox Code Playgroud)

r

22
推荐指数
3
解决办法
2933
查看次数

如何将字符串拆分为具有1/0值标志的列向量?

我有这样的角色矢量:

a <- c("a,b,c", "a,b", "a,b,c,d")

我想要做的是创建一个如下所示的数据框:

   a    b    c    d
1] 1    1    1    0
2] 1    1    0    0
3] 1    1    1    1
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,我需要使用的某种组合read.tablereshape,但我真的很挣扎.任何和帮助赞赏.

r

13
推荐指数
3
解决办法
828
查看次数

最简单地从虚拟变量创建因子变量

在这里选择问题的答案:

用dplyr创建一个因子变量?

没有给哈德利留下深刻的印象,对于我遇到的一些问题,后续的回答也不能很好地概括。我想知道社区是否可以通过一个更简单的示例做得更好:

  ### DATA ###
A = round(runif(200,0,1),0)
B = c(1 - A[1:100],rep(0,100))
C = c(rep(0,100), 1 - A[101:200])

dummies <- as.data.frame(cbind(A,B,C))
header <- c("Christian", "Muslim", "Athiest")

names(dummies) <- header

### ONE WAY ###
dummies$Religion <- factor(ifelse(dummies$Christian==1, "Christian",
                            ifelse(dummies$Muslim==1, "Muslim",
                                   ifelse(dummies$Athiest==1, "Athiest", NA))))
Run Code Online (Sandbox Code Playgroud)

解决方案模仿上面链接中提供给OP的结果。有没有更简单的函数将虚拟变量折叠为一个因子变量,例如STATA中的egen group函数?一个简单的班轮会很棒。

使用Akrun的解决方案和系统时间(谢谢):

set.seed(24)
A = round(runif(2e6,0,1),0)
B = c(1 - A[1:1e6],rep(0,1e6))
C = c(rep(0,1e6), 1 - A[1000001:2000000])

dummies <- as.data.frame(cbind(A,B,C))
header <- c("Christian", "Muslim", "Athiest")

names(dummies) <- header
attach(dummies)



#Alistaire
system.time({
  dummies %>% rowwise() %>% …
Run Code Online (Sandbox Code Playgroud)

r dplyr

3
推荐指数
1
解决办法
159
查看次数

标签 统计

r ×5

dplyr ×1