我有一个如下所示的数据框:
df <- data.frame(text = c("text1", "text2", "text3"),
a = c(1,2,3),
b = c(2,4,6),
c = c(3,6,9))
df
对于每一行,我想使用以下方法计算a,b和c列中值之间距离的平均值:
mean(dist())
我想将结果存储在名为&#34;得分&#34;的列中。结果应如下所示:
df <- data.frame(text = c("text1", "text2", "text3"),
a = c(1,2,3),
b = c(2,4,6),
c = c(3,6,9),
score = c(mean(dist(c(1,2,3))),
mean(dist(c(2,4,6))),
mean(dist(c(3,6,9)))))
df
搜索Stackoverflow我只能找到将一行转换为向量的示例。我也试过了一堆自己的方法,但每次都卡住了。这可能是由于缺乏基础R知识。请帮我解决这个问题。我非常感谢你的帮助!
答案 0 :(得分:2)
尝试这个简单的解决方案。
步骤1:创建一个函数f,用于计算所有距离的平均值
f<-function(x)
{
return(mean(dist(x)))
}
第2步:
按行应用每一行,并在score
df$score<-apply(df[,-1],1,f)
您的输出
df
text a b c score
1 text1 1 2 3 1.333333
2 text2 2 4 6 2.666667
3 text3 3 6 9 4.000000
答案 1 :(得分:0)
df$score <- apply(df[,2:4], 1, function(x) mean(dist(x)))
答案 2 :(得分:-1)
我不知道这是否会对你有所帮助:
df <- data.frame(text = c("text1", "text2", "text3"),
a = c(1,2,3),
b = c(2,4,6),
c = c(3,6,9))
score= c(mean(dist(c(1,2,3))),
mean(dist(c(2,4,6))),
mean(dist(c(3,6,9))))
df = cbind(df,score)
结果是
df
text a b c score
1 text1 1 2 3 1.333333
2 text2 2 4 6 2.666667
3 text3 3 6 9 4.000000
A +