在R中同时取相似命名列的平均值
在下面的my data.frame中,除了前两列(在R中同时取相似命名列的平均值,r,dataframe,lapply,R,Dataframe,Lapply,在下面的my data.frame中,除了前两列(person\u id和gender),列名已按名称分组。例如,audio\u vocab列为7列:audio\u vocab\u 01,…,audio\u vocab\u 07 我想知道如何在我的data.frame中取这些类似命名列的平均值,并替换其所有组成列的结果列(例如,代替原来的7个audio\u vocab列,只需要一个audio\u vocab\u mean列) 如何一次对所有类似名称的列执行此操作 w2 <- read.cs
person\u id
和gender
),列名已按名称分组。例如,audio\u vocab
列为7列:audio\u vocab\u 01
,…,audio\u vocab\u 07
我想知道如何在我的data.frame中取这些类似命名列的平均值,并替换其所有组成列的结果列(例如,代替原来的7个audio\u vocab
列,只需要一个audio\u vocab\u mean
列)
如何一次对所有类似名称的列执行此操作
w2 <- read.csv('https://raw.githubusercontent.com/izeh/n/master/w2.csv', stringsAsFactors = F)
w2我们可以使用split.default
来拆分类似的命名列,并获取它们的行平均值
cols <- 1:2
temp <- w2[-cols]
cbind(w2[cols], sapply(split.default(temp,
sub('_\\d+', '', names(temp))), rowMeans, na.rm = TRUE))
# person_id gender audio_vocab ctest dictation elicited_speech text_vocab
#1 1 MALE 0.837 0.800 0.5011 0.866 0.877
#2 2 MALE 0.909 0.957 0.7348 0.926 0.937
#3 3 FEMALE 0.826 0.737 0.5179 0.771 0.711
#4 4 FEMALE 0.775 0.591 0.5735 0.645 0.736
#5 5 MALE 0.473 0.548 0.0117 0.737 0.704
#6 6 OTHER 0.635 0.729 0.4294 0.669 0.852
#...
cols我们可以通过提取前缀部分循环unique
列名,并获得rowMeans
un1 <- unique(sub("_\\d+$", "", names(w2)[-(1:2)]))
out <- cbind(w2[1:2], do.call(cbind, setNames(lapply(un1,
function(nm) rowMeans(w2[startsWith(names(w2), nm)], na.rm = TRUE)), un1)))
un1适合您吗?@Reza可能您可以使用面板
,因为在我的问题中,相同的独立曲线被添加到xyplot,即challange!我对任何其他软件包开放?@Reza可能是您需要的层
,如中所示