我在R请求您帮助解决问题。 我的数据框如下所示
df1
a,b,c,d
1,2,3,4
1,2,3,4
1,2,3,4
df2
a,b,c,d
1,2,3,4
1,2,3,4
1,2,3,4
1,2,3,4
我需要对每个数据帧执行操作,如下所示
df1$value <- 0.12*df1$a+0.24*df1$b+0.56*df1$c
从另一个Stack Overflow应答中读取,建议放入所有数据帧的列表。我试图使用以下声明来这样做。它工作
df_list <- list(ls(pattern='df*'))
现在我无法使用lapply
使用以下代码计算新属性res <- lapply(dflist, function(x) {
0.12*grep(x[[a]])+0.24*grep(x[[b]])+0.56*grep(x[[c]]))
})
执行上述操作后,我想在没有列表的情况下改造我的数据帧。
答案 0 :(得分:2)
在R
中,最好将data.frame保存在list
中。如果我们确实需要更新全局环境中的data.frames对象,请在{d}向'{1}}'df_list'后使用list2env
。
transform
我们使用df_list <- mget(ls(pattern='df\\d+'))
res <- lapply(df_list, transform, value = 0.12*a + 0.24*b + 0.56*c)
list2env(res, envir = .GlobalEnv)
df1
# a b c d value
#1 1 2 3 4 2.28
#2 1 2 3 4 2.28
#3 1 2 3 4 2.28
df2
# a b c d value
#1 1 2 3 4 2.28
#2 1 2 3 4 2.28
#3 1 2 3 4 2.28
#4 1 2 3 4 2.28
在ls(pattern='df\\d+'))
中获取字符串(list
)的值,然后循环遍历mget
list
s data.frame
1}}),lapply(df_list, ...
在每个transform
中创建一个新列“值”,最后使用data.frame
更新全局环境中的对象。
list2env
答案 1 :(得分:2)
这是一个矩阵乘法的解决方案:
#! usr/bin/python
# -*- coding: utf-8 -*-
import csv, sys, os
from lxml import etree
csvFile = 'myData.csv' # création de la variable pour le fichier csv
reader= csv.reader(open(csvFile), delimiter=';', quoting=csv.QUOTE_NONE) # création d'une variable reader à qui on renvoie le tableau csv
print "<data>"
for record in reader:
if reader.line_num == 1:
header = record
else:
innerXml = ""
dontShow = False
type = ""
for i, field in enumerate(record):
innerXml += "<%s>" % header[i].lower() + field + "</%s>" % header[i].lower()
if i == 1 and field == "0":
type = "Next"
elif type == "" and i == 3 and field == "0":
type = "Next"
elif type == "" and i == 3 and field != "0":
type = "film"
if i == 1 and field == "X":
dontShow = True
if dontShow == False:
xml = "<%s>" % type
xml += innerXml
xml += "</%s>" % type
print xml
print "</data>"
或
df1 <- read.table(header=TRUE, sep=",", text=
"a,b,c,d
1,2,3,4
1,2,3,4
1,2,3,4")
df2 <- read.table(header=TRUE, sep=",", text=
"a,b,c,d
1,2,3,4
1,2,3,4
1,2,3,4
1,2,3,4")
df1$value <- as.matrix(df1) %*% c(0.12, 0.24, 0.56, 0)
df1
df2$value <- as.matrix(df2) %*% c(0.12, 0.24, 0.56, 0)
df2
要处理数据帧列表,您可以这样做:
df1$value <- as.matrix(df1[1:3]) %*% c( 0.12, 0.24, 0.56)
df2$value <- as.matrix(df2[1:3]) %*% c( 0.12, 0.24, 0.56)