使用下面的数据框df
text <- "
Parameter,Dec-17,Sep-17,Jun-17,Mar-17,Dec-16
Income,12112,13323.2,14655.52,16121.072,17733.1792
Cost,10900.8,11990.88,13189.968,14508.9648,15959.86128
"
df <- read.table(textConnection(text), sep=",", header = T, stringsAsFactors = F)
df
Parameter Dec.17 Sep.17 Jun.17 Mar.17 Dec.16
1 Income 12112.0 13323.20 14655.52 16121.07 17733.18
2 Cost 10900.8 11990.88 13189.97 14508.96 15959.86
我想为每个季度添加另外两行,1- Profit
(Income - Cost
)和2 - Tax
(0.2* Profit
) - {{1} }
我如何得到这个 - Dec.17, Sep.17, Jun.17, Mar.17, Dec.16
是首选。基础R解决方案也会有所帮助。
预期输出
dplyr
答案 0 :(得分:2)
也许不是最优雅的,但这是一个dplyr解决方案。最后一个select
是获得与原始表相同的列顺序。
df %>%
gather(key = month, value = amount, -Parameter) %>%
spread(Parameter, amount) %>%
mutate(Profit = Income - Cost) %>%
mutate(Tax = 0.2 * Profit) %>%
gather(key = Parameter, value = amount, -month) %>%
spread(month, value = amount) %>%
select(names(df))
Parameter Dec.17 Sep.17 Jun.17 Mar.17 Dec.16
1 Cost 10900.80 11990.880 13189.9680 14508.9648 15959.8613
2 Income 12112.00 13323.200 14655.5200 16121.0720 17733.1792
3 Profit 1211.20 1332.320 1465.5520 1612.1072 1773.3179
4 Tax 242.24 266.464 293.1104 322.4214 354.6636
答案 1 :(得分:1)
这是基础R解决方案:
df <- data.frame(t(df[, 2:ncol(df)]))
names(df) <- c("Income", "Cost")
df$Profit <- (df$Income - df$Cost)
df$Tax <- ( 0.2* df$Profit)
df <- data.frame(t(df))
再次添加“参数”列:
df$Parameter <- rownames(df)
df <- df[c(ncol(df), 2:ncol(df) -1)]
答案 2 :(得分:1)
仅使用R的根函数我尝试使用给定数据解决问题。
<uses-permission android:name="android.permission.INTERNET"/>
我转换为矩阵并完成两行之间的差异,并在矩阵内添加行和rbind的名称。 对于
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
// Handle the error
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
});
然后,我重命名了第一个名称行,并使用rbind收集数据帧的新行,将newrow(矩阵)的格式更改为数据帧。
text <- "
Parameter,Dec-17,Sep-17,Jun-17,Mar-17,Dec-16
Income,12687.6,13980.1,14506.5,14299.8,15239.6
Cost,11418.84,12582.09,13055.85,12869.82,13715.64
"
df <- read.table(textConnection(text), sep=",", header = T, stringsAsFactors = F)
结果如下:
df.matrix <- as.matrix(df)
new.row <- df[2,c(2,3,4,5,6)] - df[1,c(2,3,4,5,6)]
new.row <- cbind("Income - Cost", new.row)
最后,行的名称是1,2和21.我们可以将它们归零:
colnames(new.row)[1] <- "Parameter"
df <- rbind(df,as.data.frame(new.row))
或重命名为您希望的订单
Parameter Dec.17 Sep.17 Jun.17 Mar.17 Dec.16
1 Income 12687.60 13980.10 14506.50 14299.80 15239.60
2 Cost 11418.84 12582.09 13055.85 12869.82 13715.64
21 Income - Cost -1268.76 -1398.01 -1450.65 -1429.98 -1523.96
希望这会有所帮助。