我有一个数据帧,其中关联的“名称”向量的第一个元素与后续的命名数字向量有关。我正在尝试将无意义的数字替换为关联名称向量的第一个元素。
这是一个示例数据框:
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
向量都与一个构造相关联(在这种情况下为A或B),每个向量都number.time
与一个时间维度相关联。因此,data.0.one_minute_ago
实际上是您有one_minute_ago的A数。
我想这样做(因为我有很多的变革的大数据集)是更换number.dimension
同construct.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.dimension
和1.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个维度)。我希望解决方案考虑到这一点。
这是修改后的样本数据集,以反映这种细微之处:
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))
我们基于列名称中的“数字”创建分组“ indx”。split
基于“ indx”(“ lst”)的列名。从以“名称”作为后缀(“ r1”)的列中获取一个元素。使用“映射”,并将gsub
“ lst”的每个元素中的“数字”替换为“ r1”。
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"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句