首页 > 解决方案 > 应用函数中的条件语句在 R 中无法正常工作

问题描述

我有一个数据框,其 ID 列有许多重复的名称。所以我使用 table() 函数来获取 ID 的频率。像这样:

library(dplyr)
id <- runif(1000,1000,3000) %>% round() %>% as.character()
freq <- rep(1:50,20)
data <- data.frame(id,freq)
GetID <- function(a){
  if (a[2]==1) newid <- a[1] else newid <- paste(a[1],1:a[2],sep = "-");
  return(newid)}
idlist <- data %>% apply(., 1, GetID)
idlist2 <- unlist(idlist) %>% as.data.frame()

我想获得一个新的 ID 向量。如果频率等于 1,则新 ID 等于旧 ID。如果 freq 大于 1,则新 ID 是旧 id 结合其顺序。但是,if 语句似乎无法正常工作。所有新身份证都有订单号。

标签: rif-statementapply

解决方案


你必须使用一个功能吗?如果不:

id <- runif(1000,1000,3000)
freq <- rep(1:50,20)
num <- 1:length(id)
data <- data.frame(num,id,freq)
data2 <- data %>% filter(freq == 1) %>% mutate(newid = id)
data3 <- data %>% filter(freq != 1) %>% mutate(newid = paste(id,freq,sep = "-"))
result <- rbind(data2,data3) %>% arrange(num)

推荐阅读