问题描述
如果我有这些数据框
df1<- as.numeric(c("20","25","15","50"))
df2<- as.numeric (c("15","20","10","5"))
df3<- as.numeric(c("10","7","13"))
my_list <- list(df1,df2,df3)
sum_dat <- as.numeric(c("180","90","5"))
这里我希望列表 my_list 中的数据框即 df1 中的数字被重新缩放,使得 df1 (20+25+15+50) 的总和接近或等于 180,df2 总和等于 90,并且 df 3 sum 等于 5。
解决方法
我们可以使用 Sub ExportRangetoFile()
'Update 20130913
Dim wb As Workbook
Dim saveFile As String
Dim WorkRng As Range
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range",xTitleId,WorkRng.Address,Type:=8)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wb = Application.Workbooks.Add
WorkRng.Copy
wb.Worksheets(1).Paste
saveFile = Application.GetSaveAsFilename(fileFilter:="Text Files (*.txt),*.txt")
wb.SaveAs Filename:=saveFile,FileFormat:=xlText,CreateBackup:=False
wb.Close
Application.CutCopyMode = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
(假设 Map
都是 vector
)
numeric
,
使用 asplit
+ list2DF
+ colSums
的另一个基本 R 选项
asplit(t(t(df <- list2DF(my_list)) / colSums(df) * sum_dat),2)
给予
[[1]]
[1] 32.72727 40.90909 24.54545 81.81818
[[2]]
[1] 27 36 18 9
[[3]]
[1] 1.1111111 0.7777778 1.6666667 1.4444444