как разбить кадр данных в нескольких df на основе одного столбца в R [дубликат]

[D3] Ну.

Я устанавливаю этот пакет nuget

  Install-Package Svg  

]

Здесь вы можете найти исходный код пакета на github здесь

. Тогда вы можете сделать это:

  var svgDocument = SvgDocument.  Открытый (путь);  using (var smallBitmap = svgDocument.Draw ()) {var width = smallBitmap.Width;  var height = smallBitmap.Height;  if (width! = 2000) // Я изменяю размер моего растрового изображения {width = 2000;  высота = 2000 / маленькийBitmap.Width * высота;  } using (var bitmap = svgDocument.Draw (ширина, высота)) // Я снова визуализирую {bitmap.Save (pngPath, ImageFormat.Png);  }}  

Наслаждайтесь!

54
задан rcs 30 August 2013 в 09:38
поделиться

2 ответа

Вы можете так же легко получить доступ к каждому элементу в списке, используя, например, path[[1]]. Вы не можете поместить набор матриц в атомный вектор и получить доступ к каждому элементу. Матрица представляет собой атомный вектор с атрибутами измерения. Я бы использовал структуру списка, возвращенную split, для чего она была предназначена. Каждый элемент списка может хранить данные разных типов и размеров, поэтому он очень универсален, и вы можете использовать функции *apply для дальнейшей работы с каждым элементом в списке. Пример ниже.

#  For reproducibile data
set.seed(1)

#  Make some data
userid <- rep(1:2,times=4)
data1 <- replicate(8 , paste( sample(letters , 3 ) , collapse = "" ) )
data2 <- sample(10,8)
df <- data.frame( userid , data1 , data2 )

#  Split on userid
out <- split( df , f = df$userid )
#$`1`
#  userid data1 data2
#1      1   gjn     3
#3      1   yqp     1
#5      1   rjs     6
#7      1   jtw     5

#$`2`
#  userid data1 data2
#2      2   xfv     4
#4      2   bfe    10
#6      2   mrx     2
#8      2   fqd     9

Доступ к каждому элементу с помощью оператора [[ следующим образом:

out[[1]]
#  userid data1 data2
#1      1   gjn     3
#3      1   yqp     1
#5      1   rjs     6
#7      1   jtw     5

Или используйте функцию *apply для выполнения дальнейших операций над каждым элементом списка , Например, чтобы взять среднее значение столбца data2, вы можете использовать sapply следующим образом:

sapply( out , function(x) mean( x$data2 ) )
#   1    2 
#3.75 6.25 
65
ответ дан Simon O'Hanlon 17 August 2018 в 09:27
поделиться
  • 1
    Я задавался вопросом о производительности dlply(df, .(userid)) и обнаружил, что это плохо по сравнению с split, даже без привлечения времени выполнения require(plyr), спасибо и OP! – Francis 26 March 2015 в 15:04

Наткнулся на этот ответ, и я действительно хотел, чтобы группы BOTH (данные содержали одного пользователя и данные, содержащие все, кроме одного пользователя). Не обязательно для специфики этого сообщения, но я думал, что добавлю, если кто-то пойдет по той же проблеме, что и я.

df <- data.frame(
     ran_data1=rnorm(125),
     ran_data2=rnorm(125),
     g=rep(factor(LETTERS[1:5]), 25)
 )
        
test_x = split(df,df$g)[['A']]
test_y = split(df,df$g!='A')[['TRUE']]
Вот как это выглядит:

head(test_x)
            x          y g
1   1.1362198  1.2969541 A
6   0.5510307 -0.2512449 A
11  0.0321679  0.2358821 A
16  0.4734277 -1.2889081 A
21 -1.2686151  0.2524744 A

> head(test_y)
            x          y g
2 -2.23477293  1.1514810 B
3 -0.46958938 -1.7434205 C
4  0.07365603  0.1111419 D
5 -1.08758355  0.4727281 E
7  0.28448637 -1.5124336 B
8  1.24117504  0.4928257 C

5
ответ дан Aus_10 17 August 2018 в 09:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: