重新调整 R 中数字总和的值

问题描述

如果我有这些数据框

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