【问题标题】:How do I create a new column and add text that is specific to each row in R studio?如何在 R Studio 中创建新列并添加特定于每一行的文本?
【发布时间】:2020-01-12 11:30:32
【问题描述】:

我是 R Studio 新手,正在学习数据框。 我正在尝试将新列“uniqueID”添加到我的数据框“人口”中,并为该新列中的每一行添加唯一值。没问题,我可以像这样追加一个新列:Populations$uniqueID

但是,我在为新列下的每一行添加唯一值时遇到了麻烦。这些值应该是现有列“位置”、“变体”和“时间”中每一行中的值的组合。因此,对于每一行,新列 uniqueID 的值应该类似于“LocationVariantTime”(例如“CaliforniaMedium1953”)。这是我正在尝试的代码,使用paste(),但这绝对是错误的。我需要弄清楚如何获取每一行的值。

Populations$uniqueID <- paste(Populations$location, Populations$variant, Populations$time)

这是我查看数据框时的输出。没有新的数据列:https://share.getcloudapp.com/7Kuykdg4

我得到的错误是:

$<-.data.frame(*tmp*, uniqueID, value = character(0)) 中的错误: 替换有0行,数据有280932

提前感谢您帮助正在学习的人,

【问题讨论】:

  • 您可以考虑使用您正在获得的数据和输出以及您期望获得的输出的示例来扩展您的问题。我认为您当前的解决方案 d <- data.frame(x = c(1,2,3), y=c("A","B","C")) d$a <- paste0(d$x, d$y) 没有问题,因为它似乎工作正常。
  • 谢谢,这是我得到的输出示例,但正如您所见,没有包含文本数据的新列。关于如何调整代码以将值包含在新列中的任何想法? share.getcloudapp.com/7Kuykdg4 我得到的错误是: $tmp, uniqueID, value = character(0)) 中的错误:替换有 0 行,数据有 280932 我很感激!
  • 尝试检查您的代码是否有拼写错误等。正如您在上面的示例中看到的那样,您的代码应该可以工作。尝试将paste 的结果保存在其他地方,看看它是什么。从错误来看,它应该是字符(0),这没有多大意义。尝试关注Population$uniqueID <- rnorm(nrow(Population))

标签: r


【解决方案1】:

您的代码似乎并不遥远。不过,您可能必须先将 paste() 中的值转换为字符,如下所示:

Populations$uniqueID <- paste(as.character(Populations$location), as.character(Populations$variant), as.character(Populations$time), sep = "")

【讨论】:

  • 感谢您的回复。我尝试了您发布的代码并收到此错误:$&lt;-.data.frame(*tmp*, uniqueID, value = character(0)) 中的错误:替换有 0 行,数据有 2809321
【解决方案2】:

您可以在 id 列上按行排列 apply paste

示例

dat <- transform(dat, un.id=apply(dat[1:3], 1, paste, collapse=""))
head(dat)
#   id    type year      value        un.id
# 1  A Mmedium 2018  1.3709584 AMmedium2018
# 2  B Mmedium 2018 -0.5646982 BMmedium2018
# 3  C Mmedium 2018  0.3631284 CMmedium2018
# 4  A   Large 2018  0.6328626   ALarge2018
# 5  B   Large 2018  0.4042683   BLarge2018
# 6  C   Large 2018 -0.1061245   CLarge2018

数据:

set.seed(42)
dat <- cbind(expand.grid(id=LETTERS[1:3], 
                         type=c("Mmedium", "Large"), 
                         year=2018:2020), value=rnorm(18))

【讨论】:

  • 谢谢,你会建议我将 dat 更改为数据框人口吗?
  • 是的,只需将dat 替换为populations,当然还要替换变量名。
【解决方案3】:

根据输出,列名是大写的:

Populations$uniqueID <- paste(Populations$Location, Populations$Variant, Populations$Time)

解决方案?一个简单的案例更改!谢谢大家。

【讨论】:

    猜你喜欢
    • 2020-10-05
    • 2022-01-15
    • 2017-06-03
    • 1970-01-01
    • 2021-11-23
    • 2017-08-20
    • 2021-11-13
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多