我在R中有一个数据帧,我想根据两个列表中的行和列的特定匹配来设置值。
以下是我必须遵循的流程。我有一个数据框,如下所示
test.var1.t1 test.var2.t1 test.var1.t4 test.var3.t1 test.var3.t7
var1 0 0 0 0 0
var2 0 0 0 0 0
var3 0 0 0 0 0
var4 0 0 0 0 0
我有一个函数,它将列名作为输入,并返回一个与该列名关联的值。例如:一些_函数(“test.var1.t1”)可能返回10的值。
我有一些行名和列名的列表。我需要检查列表中的每个行名称和列名,将它们匹配在一起,计算匹配列的函数,并将值发布到相应的单元格中的数据框中。例如
行名称列表="var1""var2""var4"
列出col names=“test.var1.t1”“test.var2.t1”“test.var1.t4”“test.var3.t1”
var1应该与“test.var1.t1”和“test.var1.t4”匹配,所以我们从一些函数()中获得“test.var1.t1”和“test.var1.t4”的函数值。假设这些值分别为10和20。
var2应该与“test.var2.t1”匹配,所以获取“test.var2.t1”的函数值。假设这个值是15。
var4没有匹配的列,var3也不在行列表中,所以这应该单独留在数据帧中。
完成后,数据帧应更改为:
x.var1.t1 x.var2.t1 x.var1.t4 x.var3.t1 x.var3.t7
var1 10 0 20 0 0
var2 0 15 0 0 0
var3 0 0 0 0 0
var4 0 0 0 0 0
最好的方法是什么?
你可以这样做:
nn <- c("var1" ,"var2", "var4")
## I am using a for loop because the side effect is desired here
for(x in nn) {
## find the corresponding column names
col <- grep(x,names(dx),value=TRUE)
## if any apply the function
if(length(col)>0) dx[x,col] <- get_val(x)
}
使用虚拟函数测试它get_val
:
get_val <- function(x){
switch(x,
var1=c(15,20),
var2=c(10))
}
和dx
:
dx <- read.table(text=" test.var1.t1 test.var2.t1 test.var1.t4 test.var3.t1 test.var3.t7
var1 0 0 0 0 0
var2 0 0 0 0 0
var3 0 0 0 0 0
var4 0 0 0 0 0",
stringsAsFactors = FALSE)
你会得到预期的结果:
# test.var1.t1 test.var2.t1 test.var1.t4 test.var3.t1 test.var3.t7
# var1 15 0 20 0 0
# var2 0 10 0 0 0
# var3 0 0 0 0 0
# var4 0 0 0 0 0
基本上,它应该在步骤中找到指标为43且步骤=1的行,然后将该值放在新列中,在这种情况下,它将是“Gross value Added”。任何帮助都将非常感谢!
我有一个类似于这个和这个的问题。区别在于我必须按位置选择行,因为我不知道索引。 我想做一些类似于,但iloc不允许这种访问。如果我执行,则会出现关于链接索引的警告。
我读了“如何从数据帧的单元格中获取值?”以及“如何选择数据框的最后一列”。我有点困惑,什么是2018年接受的方法从熊猫数据帧的单元格获取值,因为已被弃用,并且在上的留档有点稀疏。我想按标签选择行,按位置/整数选择列。下面我使用的方法是2018年公认的方法吗?我有这个代码: 它生成一个字符串如下所示: 通过函数将其转换为数据帧,如下所示: 它是行的最后一列的值(整数1),标签为,我对此感兴趣。这是2
我有一个名为“segments”的数据帧,看起来像这样: 我想让它看起来像这样。其中Outdegree是包含列A中的值的行数,例如10135在3行中,因此每行Outdegree设置为3: 以下是我正在尝试但不起作用的内容: 该代码将所有行相加,并将总计值提供给OUTDEGREE列
我有一个包含100,000行(人)和500列(概率)的数据集,我想用测试概率扫描各列,以找到大于和最接近测试值的列标题(a、b或c ),并将标题记录在新列中。 以数据表为例: 新列将记录“a”(0.1 我最初做它作为一个矩阵,而不是data.table.下面的代码不会工作,但给出了一个想法,它是如何运作的 如何跨 data.table 中的列执行此匹配。我认为我需要使用 来自 的查询。但不确定如何
我们如何从谷歌电子表格中的单元格中获得价值? 我有行和列索引从