R 将数据帧的两列向量转换为单个数字列

R 将数据帧的两列向量转换为单个数字列,r,dataframe,numeric,levels,R,Dataframe,Numeric,Levels,考虑我的seed研究的以下玩具数据框架: site <- c(LETTERS[1:12]) site1 <- rep(site,each=80) fate <- c('germinated', 'viable', 'dead') fate1 <- rep(fate,each=320) number <- c(41:1000) df <- data.frame(site1,fate1,number) > str(df) 'dat

考虑我的seed研究的以下玩具数据框架:

site <- c(LETTERS[1:12])          
site1 <- rep(site,each=80)

fate <- c('germinated', 'viable', 'dead')
fate1 <- rep(fate,each=320)

number <- c(41:1000)

df <- data.frame(site1,fate1,number)

> str(df)
'data.frame':   960 obs. of  3 variables:
 $ site1 : Factor w/ 12 levels "A","B","C","D",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ fate1 : Factor w/ 3 levels "dead","germinated",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ number: int  41 42 43 44 45 46 47 48 49 50 ...

非常欢迎使用
dplyr
库中的
case\u
提供所有建议

df$year16 <-
case_when(
    levels(df$fate1)[df$fate1] == "dead" ~ 0,
    levels(df$fate1)[df$fate1] == "viable" ~ 1,
    levels(df$fate1)[df$fate1] == "germinated" ~ 2,
    TRUE ~ -1
)

df$year16从
dplyr
库中使用
case\u时:

df$year16 <-
case_when(
    levels(df$fate1)[df$fate1] == "dead" ~ 0,
    levels(df$fate1)[df$fate1] == "viable" ~ 1,
    levels(df$fate1)[df$fate1] == "germinated" ~ 2,
    TRUE ~ -1
)
df$year16baser解决方案:

assignnum <- function(x) {

  if (x == 'viable') {
    z <- 1
} else if (x == 'dead') {
  z <- 0
} else if (x == 'germinated') {
  z <- 2  
}
  return(z)
}

df['result'] <- sapply(df$fate1, assignnum)
assignnumBase R解决方案:

assignnum <- function(x) {

  if (x == 'viable') {
    z <- 1
} else if (x == 'dead') {
  z <- 0
} else if (x == 'germinated') {
  z <- 2  
}
  return(z)
}

df['result'] <- sapply(df$fate1, assignnum)

assignnum如zx8754所述,您可以查看因子的属性

year16 <- as.numeric(factor(df$fate1, levels = c("dead", "viable", "germinated")))-1

year16如zx8754所述,您可以查看因子的属性

year16 <- as.numeric(factor(df$fate1, levels = c("dead", "viable", "germinated")))-1


year16阅读关于
因子的内容
?也阅读
匹配(df$fate1,c(“死亡”、“存活”、“发芽”)-1
是的,我会阅读。谢谢你可能重复的相关帖子:阅读关于
因子的文章
?还有
匹配(df$fate1,c(“死亡”、“存活”、“发芽”)-1
是的,我会阅读。谢谢可能重复的相关帖子:这个想法很聪明,我喜欢+1,但我想知道重新整理因子中的每个条目对性能的影响。谢谢@Kath。它的工作原理与Tim Biegeleisen建议的相同。请阅读我在Tim回答下的评论,以了解更多困惑。@TimBiegeleisen是的,你是对的!实际上我更喜欢你的解决方案,但我想提供一种基本的R方法。@TimBiegeleisen我在15MM数据集上进行了测试,verse(你的)解决方案的速度慢了一倍6@Muneer
rep(year16,df$number)
能给出你想要的结果吗?这个想法很聪明,我喜欢+1,但我想知道重新整理因子中的每个条目对性能的影响。谢谢@Kath。它的工作原理与Tim Biegeleisen建议的相同。请阅读我在Tim回答下的评论,以了解更多困惑。@TimBiegeleisen是的,你是对的!实际上我更喜欢你的解决方案,但我想提供一种基本的R方法。@TimBiegeleisen我在15MM数据集上进行了测试,verse(你的)解决方案的速度慢了一倍6@Muneer
rep(year16,df$number)
是否给出了您想要的结果???@Tim Biegeleisen,非常感谢。它解决了我的问题。但是,还有一个问题:例如,如果在站点A中有40个“发芽”种子,它只会将1分配给所有40个。不过,我想重复14次。可能吗?分配140次和重复140次有什么区别?从字面上说,没有区别。一旦我运行了这个模型,它可能会有一些效果。问题是两种解决方案都给了我0、1和2个12次,这是我不想要的。@Tim Biegeleisen,非常感谢。它解决了我的问题。但是,还有一个问题:例如,如果在站点A中有40个“发芽”种子,它只会将1分配给所有40个。不过,我想重复14次。可能吗?分配140次和重复140次有什么区别?从字面上说,没有区别。一旦我运行了这个模型,它可能会有一些效果。问题是两个解决方案都给了我0、1和2个12倍,这是我不想要的。