当前位置: 首页 > 知识库问答 >
问题:

将向量的每个元素并行应用到相应的数据帧行

充昌勋
2023-03-14

我有一个数据帧,其中前3列是最后一列的标记名称,这是一个矩阵列表。每个矩阵都是二进制的(只有1和0)。我想从每一行中提取一个标记名称,并用该标记名称替换行矩阵中1的所有值,但是我想避免使用循环,以便我可以并行地对所有行执行此操作。

示例数据框:

> df1
   name scenario       Fire
1 name1   scene1 1, 1, 1, 0
2 name2   scene2 0, 1, 0, 1
3 name3   scene3 0, 0, 0, 1

> class(df1$Fire)
[1] "list"

> df1$Fire
[[1]]
     [,1] [,2]
[1,]    1    1
[2,]    1    0

[[2]]
     [,1] [,2]
[1,]    0    0
[2,]    1    1

[[3]]
     [,1] [,2]
[1,]    0    0
[2,]    0    1

目标格式如下所示。。。

> df1$Fire
[[1]]
     [,1]     [,2]    
[1,] "scene1" "scene1"
[2,] "scene1" "0"     

[[2]]
     [,1]     [,2]    
[1,] "0"      "0"     
[2,] "scene2" "scene2"

[[3]]
     [,1] [,2]    
[1,] "0"  "0"     
[2,] "0"  "scene"

我尝试过使用apply(df1,1,function)方法,但没有成功,因为结果输出是列表格式的,而不是获得df1的原始结构。有什么想法吗?

共有1个答案

仉运乾
2023-03-14

您可以使用映射

df1$Fire <- Map(function(x, y) replace(x, x == 1, y), df1$Fire, df1$scenario)
df1$Fire

#[[1]]
#     [,1]     [,2]    
#[1,] "scene1" "scene1"
#[2,] "scene1" "0"     

#[[2]]
#     [,1]     [,2]    
#[1,] "0"      "0"     
#[2,] "scene2" "scene2"

#[[3]]
#     [,1] [,2]    
#[1,] "0"  "0"     
#[2,] "0"  "scene3"

数据

通常情况下,如果您使用dput以可复制的形式添加数据会更好,这样我们就不必从头开始构建它。

df1 <- structure(list(name = c("name1", "name2", "name3"), scenario = c("scene1",
"scene2", "scene3"), Fire = list(structure(c(1, 1, 1, 0), .Dim = c(2L, 
2L)), structure(c(0, 1, 0, 1),.Dim = c(2L, 2L)), structure(c(0, 
0, 0, 1),.Dim = c(2L, 2L)))),row.names = c("1", "2", "3"),class = "data.frame")
 类似资料:
  • 问题内容: 假设我有一个numpy数组: 我有一个对应的“向量”: 我如何沿每一行进行减法或除法运算,所以结果是: 长话短说:如何使用对应于每一行的1D标量数组在2D数组的每一行上执行操作? 问题答案: 干得好。您只需要与广播结合使用(或):

  • 问题内容: 如何将函数应用于变量输入列表?例如,函数返回真值,但不返回函数的实际输出。 预期的输出是: 我知道是内置的。这只是一个例子。 问题答案: 我认为您的意思是使用而不是: 更简单的是,您可以使用而不是从中导入(感谢@alecxe): 在Python 2.x中,通过将给定函数应用于列表中的每个元素来构造新列表。通过限制使用给定函数求值的元素来构造新列表。 在Python 3.x中,和构建迭代

  • 我想替换一行数据的每个值。帧,对于大小相等的逻辑矩阵,其值为TRUE,由向量的对应行的值确定。以下是一个例子: 所以结果应该是这样的: 有没有不使用循环的方法来实现这一点?谢谢

  • 我必须从二维坐标计算希尔伯特曲线上的距离。使用hilbertcurve包,我构建了自己的“hilbert”函数。坐标存储在数据帧(列1和列2)中。如您所见,我的函数在应用于两个值(test)时有效。 然而,它只是不工作时,应用行明智通过应用函数!这是为什么呢?我到底做错了什么?我需要一个额外的列“希尔伯特”,希尔伯特距离在列“col_1”和“col_2”中给出。 最后一个命令以错误结束: 谢谢你的

  • 我想应用一个自定义函数并创建一个名为population2050的派生列,该列基于数据框中已经存在的两列。 当我运行上面的代码时,我得到一个错误。我是否没有正确使用“应用”功能?

  • 我的问题是当用户输入文本时,使用 .split() 时应该有两个要拆分的元素,但是对于它拆分的项目,我如何将它们放入不同的列表中,以便我可以使用基于整数的列表进行计算。 e、 g.用户输入“skyrim,100”,“skyrism”条目是一个字符串,但带有数字(整数)“100”。 游戏名称(字符串)、小时(整数) 天际 , 100 遗忘 , 25 侠盗猎车手 V , 50 因此,上面列出的项目是用