gpt4 book ai didi

r - 系统地用关联的 R 向量的第一个元素替换变量名的一部分

转载 作者:行者123 更新时间:2023-12-01 12:36:37 26 4
gpt4 key购买 nike

我有一个数据框,其中关联的“名称”向量的第一个元素与后续命名的数值向量相关。我试图用关联名称向量的第一个元素替换无意义的数字。

这是一个示例数据框:

df <- data.frame(data.0.name = c("A", "A", "A"), data.0.one_minute_ago =     c(1,2,1), data.0.one_hour_ago = c(2,2,3), 
data.1.name = c("B", "B", "B"), data.1.one_minute_ago = c(3,3,2), data.1.one_hour_ago = c(5,6,2))`

每个number.name vector 与构造(在本例中为 A 或 B)相关联,并且每个 number.time与时间维度相关联。所以,data.0.one_minute_ago实际上是您 one_minute_ago 的 A 数。

我想做的(因为我有一个包含大量转换的大型数据集)是替换 number.dimensionconstruct.dimension ,当然对每个 number. 都这样做从 0:9 开始

我已经编写了一些 grep 代码来开始这项任务,但无济于事(我坚持保留 number. 之后的所有内容

grep( "data.[0-9].name" ,names(df), perl=TRUE)
as.character(df[1, 1])
as.character(df[1, 4])
as.character(names(df[2]))
as.character(names(df[3]))
as.character(names(df[5]))
as.character(names(df[6]))

df.1 <- (df[1, grep( "data.[0-9].name" ,names(df))])


df.1 <- (df[1, grep( "data.[0-9].name" ,names(df))])
df.1 <- data.frame(lapply(df.1, as.character), stringsAsFactors=FALSE)
constructs <- as.character(df.1[1,c(1:2)])

这里是 constructs 的第一个和第二个元素是与 0.name 关联的构造/0.dimension1.name/1.dimension分别。

constructs [1]
constructs [2]

从那里,我相当确定代码会涉及一些 names(df)[] <-但我不确定从这里到哪里去。

感谢任何帮助。

编辑:这是所需的变量名输出:只需更改变量名(当然保留与变量名关联的值:

data.A.name   data.A.one_minute_ago    data.A.one_hour_ago    data.B.name    data.B.one_minute_ago    data.B.one_hour_ago

编辑 2:在我的真实数据集中,每个维度(即 one_minute_ago、one_hour_ago、one_day_ago)的重复次数可能因构造而异(即,一个构造为两个维度,另一个构造为 3 个维度,另一个为 9 个维度)。我希望解决方案考虑到这一点。

这是一个修改后的示例数据集,以反射(reflect)这种微妙之处:

df <- data.frame(data.0.name = c("A", "A", "A"), data.0.one_minute_ago = c(1,2,1), data.0.one_hour_ago = c(2,2,3), 
data.1.name = c("B", "B", "B"), data.1.one_minute_ago = c(3,3,2), data.1.one_hour_ago = c(5,6,2),
data.2.name = c("C", "C", "C"), data.2.one_minute_ago = c(3,3,2), data.2.one_hour_ago = c(5,6,2), data.2.one_day_ago = c(3,2,3))

最佳答案

我们根据列名称中的“数字”创建分组“索引”。 拆分 基于“index”(“lst”)的列名。从以“名称”为后缀(“r1”)的列中获取一个元素。使用'Map' 和gsub 将'lst' 的每个元素中的'number' 替换为'r1' 的'number'。

 indx <- gsub('[^0-9]+', '', names(df))
lst <- split(names(df), indx)
r1 <- as.character(unlist(df[1,grep('name', names(df))]))
lst2 <- Map(function(x,y) gsub('[0-9]+', y, x), lst, r1)
names(df) <- unsplit(lst2, indx)
names(df)
# [1] "data.A.name" "data.A.one_minute_ago" "data.A.one_hour_ago"
#[4] "data.B.name" "data.B.one_minute_ago" "data.B.one_hour_ago"
#[7] "data.C.name" "data.C.one_minute_ago" "data.C.one_hour_ago"
#[10] "data.C.one_day_ago"

关于r - 系统地用关联的 R 向量的第一个元素替换变量名的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29080079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com