我正在尝试编写一个循环,它将变量放在一个表(表x)的列中,并将这些名称用作另一个表(表y)中的列名,然后根据特定条件填充这些列。这是我的代码。我一直试图使用For循环。
for(player in x)
{
y$paste0(x$player)<-ifelse(y$Playing=="True", 1, 0)
}
我得到的错误是&#34;复杂分配中的无效功能&#34;
我正在处理体育数据。我的最终目标是计算每个球员在球场上的传球次数。我需要在球场上为球员分配变量1,如果他们在球场上则为0。任何帮助将不胜感激。
答案 0 :(得分:1)
如何:
# create df1 with 10 random TRUE/FALSE values
df1 <- data.frame(Player= sample(c(TRUE,FALSE),10,TRUE))
df1$playing <- sapply(df1$Player, function(x) ifelse(x==TRUE,1,0))
require(tidyr)
df1 <- data.frame(ID = seq(1,35),Player= sample(c("TRUE","FALSE"),35,TRUE))
df1$playing <- sapply(df1$Player, function(x) ifelse(x==TRUE,1,0))
df1 <- df1[,-2]
spread(df1, ID, playing)
并推广到多个游戏(即每个玩家ID多行)
df1 <- data.frame(ID = rep(1:35,each=3),GameID=rep(1:3,35),Player= sample(c("TRUE","FALSE"),105,TRUE))
df1$playing <- sapply(df1$Player, function(x) ifelse(x==TRUE,1,0))
df1 <- df1[,-3]
spread(df1, ID, playing)
示例输出
GameID 1 2 3 4
1 0 1 0 0
2 0 0 1 0
3 0 1 0 0
答案 1 :(得分:1)
在这种情况下,您不需要paste0
。根据我对您尝试过的代码的理解,以下内容可能会起作用。
首先让我们构成数据框x
和y
。
set.seed(1) # make it reproducible
x <- data.frame(A = 1:5, B = rnorm(5))
y <- data.frame(Playing = sample(c("True","False"), 10, TRUE))
现在,创建新列。
for(player in names(x)) {
y[[player]] <- ifelse(y$Playing == "True", 1, 0)
}
列已创建。
str(y)
'data.frame': 10 obs. of 3 variables:
$ Playing: Factor w/ 2 levels "False","True": 2 2 1 2 1 2 1 1 2 1
$ A : num 1 1 0 1 0 1 0 0 1 0
$ B : num 1 1 0 1 0 1 0 0 1 0